作者简介: 博主在读计科双非本科,目前大二,正在学习JAVA,数据库,操作系统,计算机网络,数据结构,JAVA Web等…
个人主页:熬夜磕代码丶
作品专栏: 从0到1,学习算法
⭐我变秃了,也变强了⭐
给大家介绍一款程序员必备刷题平台——牛客网
点击注册一起刷题收获大厂offer吧

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC

文章目录

  • 一、方法一(暴力求解法)
    • 代码实现
  • 二、方法二(三步翻转法)
    • 1.思路
    • 2.代码实现
  • 三、方法三(字串判断法)
    • 1.思路
    • 2.代码实现

一、方法一(暴力求解法)

代码实现

#include<stdio.h>
#include<assert.h>
void left_move(char* arr, int len, int n)
{assert(arr && len > 0 && n >= 0);n = n % len;//为了避免n大于字符串长度,浪费时间while (n){char ret = arr[0];int i = 0;for (i = 0; i < len-1; i++){arr[i] = arr[i + 1];}arr[i] = ret;n--;}
}
int main()
{char arr1[] = "woyaojindachang";char arr2[] = "jindachangwoyao";int len = strlen(arr1);int i = 0;for ( i = 0; i < len; i++){if (strcmp(arr1, arr2) == 0){printf("yes\n");break;}left_move(arr1, len, 1);}if (i == len){printf("no");}return 0;
}

二、方法二(三步翻转法)

1.思路

将代码分为2部分:1.要旋转的部分 2.不旋转的部分
三步翻转分别为:1.将要旋转的旋转 2.将不旋转的旋转 3.整体旋转
例如
ABCD 要旋转两个字符–> AB CD
1.先将旋转部分ab逆序–>BA CD
2.再将不旋转部分逆序–>BA DC
3.最后全部逆序–>CDAB

2.代码实现

void move(char* arr, int start, int end)
{while (start < end){char t = arr[start];arr[start] = arr[end];arr[end] = t;start++;end--;}
}
void left_move(char* arr, int len, int n)
{assert(arr && len > 0 && n >= 0);n = n % len;move(arr, 0, n - 1);move(arr, n, len - 1);move(arr, 0, len - 1);
}int main()
{char arr1[] = "woyaojindachang";char arr2[] = "jindachangwoyao";int len = strlen(arr1);int i = 0;for (i = 0; i < len; i++){if (strcmp(arr1, arr2) == 0){printf("yes\n");break;}left_move(arr1, len, 1);}if (i == len){printf("no");}return 0;
}

三、方法三(字串判断法)

1.思路

将一旋转字符串自身连接,然后判断另一个字符串是否为连接后的字符串的子串,如果是,则是旋转后的字符串,否则,相反。

2.代码实现

int is_left_move(char* arr1, char* arr2)
{int len1 = strlen(arr1);int len2 = strlen(arr2);if (len1 != len2){return 0;}strncat(arr1, arr1, len1);//追加自身字符串必须使用strncat,strcat适用不同字符串连接char* ret = strstr(arr1, arr2);//判断arr1里有没有子串arr2if (ret == NULL)return 0;elsereturn 1;
}
int main()
{char arr[20] = "AABCD";char arr1[] = "ABCDA";int n = is_left_move(arr, arr1);if (n){printf("YES\n");}else{printf("NO\n");}return 0;
}

字符串旋转——C语言相关推荐

  1. C语言——字符串旋转问题

    字符串的旋转: ABCD左旋一个字符为BCDA ABCD左旋两个字符为CDAB ABCD右旋一个字符为DABC ABCD右旋两个字符为CDAB 这里只写了左旋,右旋的原理和左旋一样. 目录 实现旋转字 ...

  2. C语言习题——字符串旋转结果

    写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. 有两种思路: 1.每左旋一个字符,判断是否和输入的字符串相等. 2.给原字符串后面追加其本身,查找输入的字符串是否为追加后的字符串的子 ...

  3. C语言---写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

    题目: 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. #include <string.h> #include <stdio.h> void left_re ...

  4. C语言基础10——指针进阶。字符指针、指针数组、数组指针、函数指针、函数指针数组、回调函数、数组名详解、杨氏矩阵、字符串旋转

    目录 字符指针 指针数组 数组指针 数组传参.指针参数 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 练习 数组名的意义 指针笔试题 字符指针 字符指针的另一种使用方式 #include ...

  5. 华为机考HJ4字符串分隔C语言题解

    华为机考HJ4字符串分隔C语言题解 好家伙,今天的while循环检测文件末尾又好使了. 把白给打在公屏上. 主要思路就是求余的花样使用. 首先把字符串数组里的内容全部放入新的数组. 新的数组每满八个就 ...

  6. 判断一个字符串是否为另外一个字符串旋转之后的字符串。

    ★判断一个字符串是否为另外一个字符串旋转之后的字符串. 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCDA ...

  7. java语言中json转换,JSON字符串和JAVA语言对象的相互转换教程

    本文主要向大家介绍了JSON字符串和JAVA语言对象的相互转换教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一:字符串转换为对象:使用JSON.parse()方法 var st ...

  8. c 字符串数组_C语言探索之旅 | 第二部分第四课:字符串

    内容简介 前言 字符类型 显示字符 字符串其实就是字符的数组 字符串的创建和初始化 从 scanf 函数取得一个字符串 操纵字符串的一些常用函数 总结 第二部分第五课预告 1. 前言 上一课 C语言探 ...

  9. 关于字符串旋转问题的一些心得

    最近在学习编程,跟着B站一起在学习,讲了一个字符串旋转的问题,想写个博客记录一下,下面是这个题的题目. 题目内容: 实现一个函数,可以左旋字符串中的k个字符 例如: ABCD左旋一个字符得BCDA A ...

最新文章

  1. python excel操作单元格_python 操作excel表格的方法
  2. [Node]node.js 文件操作
  3. Codeforces Divisibility【水题】
  4. leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法
  5. 遍历children_589. N叉树的前序遍历
  6. 插值问题(拉格朗日插值、牛顿插值)
  7. Flash,EEPROM差别
  8. 针对ARP协议的病毒攻击的简单分析
  9. 官方授权正版 Avast AntiTrack Premium 反跟踪工具软件
  10. w10计算机名重新启动此计算机后,win10电脑关机后自动重启怎么回事?原因与解决办法...
  11. xp系统计算机启动时灰色界面,XP系统任务管理器是灰色的打不开怎么办
  12. linux怎么进入自己添加的软盘,linux – 创建没有mount的虚拟软盘映像?
  13. 20190323——Python IO编程
  14. 量化投资之工具篇一:Backtrader从入门到精通(5)-Strategy类源代码解读
  15. IDEA 在hdfs中创建目录
  16. 中职网络安全—隐藏信息探索
  17. 用阿里云托管服务器怎么托管_云托管使企业更具竞争力的8个原因
  18. 万字综述!命名实体识别(NER)的过去和现在
  19. 软件领域专利申请的基本特点
  20. Excel催化剂开源第31波-pdf相关功能实现及类库介绍

热门文章

  1. 第七届飞思卡尔智能车光电组代码
  2. 基于Dijkstra最短路径算法的栅格地图避障路线规划仿真
  3. java web国外 研究现状_国外javaWeb开发技术.doc
  4. Axure rp简单介绍及下载安装详细步骤
  5. 07 Android 植物人大战僵尸-修复放置卡片重叠Bug
  6. ipad 查看电池寿命
  7. Ghost超级助手 1.00 beta II
  8. Android单目手势识别,手势追踪研究与手势识别应用平台实现
  9. 【面试题】1014- 面试官:如何使用CSS完成视差滚动效果?
  10. 海外优秀资讯抢先看6:私有应用云平台Sandstorm服务对象之开发人员