题目链接: 面试题 01.09. 字符串轮转

思路:
-
模拟
先判断两个字符串长度是否相等,然后将s1逐字与s2首字相比较,如果s1中某个字符(假设为第i个字符)与s2首字符相同,则调用check方法:双指针逐个比较两个字符串,这里s1视为一个环,即采用s1[(i++)%lenth]的方法进行遍历
class Solution { public: bool check(string s1, string s2, int i){ int len = s1.length(); int j = 0; while(j<len){ if(s1[(i++)%len] == s2[j++]){ continue; }else{ return false; } } return true; } bool isFlipedString(string s1, string s2) { if(s1.length()!=s2.length()) return false; if(s1.length() == 0) return true; int i = 0; for(;i<s1.length();i++){ if(s1[i] != s2[0]){ continue; } if(check(s1,s2,i)) return true; } return false; } };
-
查找子字符串
拼接两个s1,如果符合题设,则可以在拼接后的字符串中find到s2
class Solution { public: bool isFlipedString(string s1, string s2) { return s1.size() == s2.size() && (s1 + s1).find(s2) != string::npos; } };