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

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

写这篇文章的原因


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

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; //看看找不找得到
}

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

相关文章
|
2天前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
75 0
|
2天前
|
算法 搜索推荐 程序员
第四十九练 请以递归方式实现判断一个字符串是否为回文字符串的
第四十九练 请以递归方式实现判断一个字符串是否为回文字符串的
11 0
|
2天前
|
算法 Java C++
数据结构与算法面试题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。(提示:使用动态规划或者中心扩散)
数据结构与算法面试题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。(提示:使用动态规划或者中心扩散)
44 0
|
2天前
7-7 念数字 (15 分)(用数组简化判断过程)
7-7 念数字 (15 分)(用数组简化判断过程)
20 0
|
2天前
|
算法 Java
给定一个字符串数组,如何找到其中最长的回文子串? 要求:编写一个Java函数,输入一个字符串数组,输出其中最长的回文子串。要求时间复杂度为O(n^2)。可以考虑使用动态规划或中心扩展的方法来优化算法。
给定一个字符串数组,如何找到其中最长的回文子串? 要求:编写一个Java函数,输入一个字符串数组,输出其中最长的回文子串。要求时间复杂度为O(n^2)。可以考虑使用动态规划或中心扩展的方法来优化算法。
50 1
|
9月前
|
Java
每日一题,数组字符串的匹配问题
每日一题,数组字符串的匹配问题
|
10月前
|
C语言
【C语言每日一题】判断字符串旋转结果(附加字符串左旋详解)
【C语言每日一题】判断字符串旋转结果(附加字符串左旋详解)
56 0