796. 旋转字符串
作者:互联网
796. 旋转字符串
题目链接:796. 旋转字符串
题目描述
给定两个字符串, A 和 B。
A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' 。如果在若干次旋转操作之后,A 能变成B,那么返回True。
A
和B
长度不超过100
。
思路分析
KMP算法,移动字符,可以通过拼接字符串来实现,拿题目中的A=“abcde”举例子,T=A+A=“abcdeabcde”,那么原来是(abcde)abcde,旋转一次变成a(bcdea)bcde,旋转两次同理,那么原问题就变成在T中是否有匹配字符子串B,变成了字符串匹配问题。
注意两个串长度不一样那么肯定返回false,如果是空串,那么返回true
代码实现
class Solution {
public:
bool rotateString(string s, string goal) {
string t=s+s;
string q=goal;
int qlen=q.size();
int tlen=t.size();
//判断两串长度是否相等
if(qlen*2!=tlen)
return false;
//判断是否是空串
if(!qlen)
return true;
//求next数组
vector<int>next(qlen,-1);
for(int i=1,j=-1;i<qlen;i++)
{
while(j>-1&&q[i]!=q[j+1])j=next[j];
if(q[i]==q[j+1])j++;
next[i]=j;
}
//匹配过程
for(int i=0,j=-1;i<tlen;i++)
{
while(j>-1&&t[i]!=q[j+1])j=next[j];
if(t[i]==q[j+1])j++;
if(j==qlen-1)
return true;
}
return false;
}
};
标签:796,qlen,string,int,旋转,字符串,next 来源: https://www.cnblogs.com/zengfanlu/p/15016185.html