如何用简单的方法来判断一个字符串是否是由另一个字符串旋转得来的

简介: 如何用简单的方法来判断一个字符串是否是由另一个字符串旋转得来的

写这篇文章的原因


今天在刷题的过程中遇到了一个题就是:判断一个字符串是否是由另一个字符串旋转得来的呢?我呢,一开始的思路是:将一个字符串的所有旋转结果都给写出来,然后再一个一个来判断。这样听起来是不是就特别麻烦,告诉你这不只是麻烦而且还容易出错,就拿我写的代码说吧。

void ReverseStr(char* str1,int m, int n)
{
  char* left = str1 + m;
  char* right = str1 + n;
  while (left <= right)
  {
    char tmp = *left;
    *left = *right;
    *right = tmp;
    left++;
    right--;
  }
}
int IsReverseStr(char* str1, char* str2, void (*p)(char* str1, int m, int n))
{
  int len = strlen(str1);
  char start[6] = "0";
  strncpy(start, str1,5);
  for (int i = 0; i < len; i++)
  {
    ReverseStr(str1, 0,i);
    ReverseStr(str1, i+1,len-1);
    ReverseStr(str1, 0,len-1);
    if (0 == strcmp(str1, str2))
      return 1;
  }
  return 0;
}
int main()
{
  char arr1[] = "AABCD";
  char arr2[] = "BCDAA";
  int ret = IsReverseStr(arr1, arr2,ReverseStr);
  printf("%d", ret);
  return 0;
}

有没有看出问题

25.png


对了,就是当我进行了一次字符串旋转的时候,原来的字符串里面内容的顺序也就被打乱了,我们再进行下一次操作的时候就不能得到我们想要的结果了,就是因为这个困扰了我大半天,我不断地调试修改最终以我当前的知识储备,还是没能将功能给实现,所以我就请教了老师,我一看代码我都懵了,为啥就这几行代码就能将我的几十行代码给替换,代码少不说,功能也实现了,而且逻辑也不复杂,比起我自己写的代码可好太多了。所以这里呢我想给大家分享分享我的经历,希望能告诉大家要提增强自己的逻辑能力,多刷题,多看看别人的代码是怎样写的。


代码实现


下面就是那几行打败我的代码

int findRound(const char * src, char * find)
{
  char tmp[256] = { 0 }; //用一个辅助空间将原字符串做成两倍原字符串
  strcpy(tmp, src); //先拷贝一遍
  strcat(tmp, src); //再连接一遍
  return strstr(tmp, find) != NULL; //看看找不找得到
}

看着是不是很不可思议,是不是觉得我之前写的代码太冗余了?大家可千万别学我这样,既浪费了时间,还没有达到目的。祝大家在以后的计算机生涯中越走越顺,谢谢大家。

相关文章
|
6月前
面试题 08.08:有重复字符串的排列组合
面试题 08.08:有重复字符串的排列组合
52 0
|
6月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
104 0
|
6月前
【错题集-编程题】重排字符串(贪心 + 构造)
【错题集-编程题】重排字符串(贪心 + 构造)
|
6月前
|
算法 搜索推荐 程序员
第四十九练 请以递归方式实现判断一个字符串是否为回文字符串的
第四十九练 请以递归方式实现判断一个字符串是否为回文字符串的
40 0
|
6月前
面试题 08.07:无重复字符串的排列组合
面试题 08.07:无重复字符串的排列组合
54 0
每日一题,数组字符串的匹配问题
每日一题,数组字符串的匹配问题
【每日一题Day69】转换字符串的最少操作次数 |贪心
实现:遍历整个字符串,如果当前字符为’X’,那么进行转换,指针后移三位;如果当前字符为’O’,那么指针后移一位
82 0
下一篇
无影云桌面