解题思路
题面
两倍s1变成字符串匹配,用KMP。
KMP预先处理模式串(短串)的\(next[]\)数组,\(next[]\)的意思为自我匹配一样的值的下一个的位置。
复杂度\(O(n)\)
代码
class Solution {
public:
bool isFlipedString(string s1, string s2) {
int len1=s1.length(),len2=s2.length();
if(len1!=len2) return 0;
string s3=s1+s1;
int nxt[100001];
nxt[0]=-1;nxt[1]=0;
int len3=s3.length();
for(int i=2,j=0;i<len2;i++){
if(s2[i-1]==s2[j]) nxt[i]=++j;
else if(j>0) j=nxt[j];
else nxt[i]=0;
}
int i,j;
for(i=0,j=0;i<len3 && j<len2;){
if(s3[i]==s2[j]) i++,j++;
else if(j!=0) j=nxt[j];
else i++;
}
return j==len2 ? 1 : 0;
}
};
标签:nxt,轮转,string,int,s1,length,KMP,Leetcode
From: https://www.cnblogs.com/ChrisKKK/p/16742951.html