在一个串中查找是否出现过另一个串,这是KMP的看家本领。
class Solution{
public:
void getNext(int* next, const string& s)
{
next[0] = 0;
int j = 0;
for(int i=1; i<s.size();i++)
{
while(j>0 && s[i] != s[j])
{
j = next[j-1];
}
if(s[i]==s[j])
{
j++;
}
next[i] = j;
}
}
bool repeatedSubstrintPattern(string s)
{
if(s.size() == 0)
{
return false;
}
int next[s.size()];
getNext(next, s);
int len = s.size();
if(next[len-1] != 0 && len %(len-(next[len-1])) == 0)
{
return true;
}
return false;
}
};