题目:
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
class Solution {
public:
void getNext(int* next,const string& s)
{
int j = -1;
// 第一次自己写的时候忘了给第一个元素初始化了
next[0] = j;
for(int i = 1; i < s.size(); i++)
{
while(j >= 0 && s[i] != s[j+1])
{
j = next[j];
}
if(s[i] == s[j+1]) // 这里也写错了,忘记是 j+1
{
j++;
}
next[i] = j;
}
}
bool repeatedSubstringPattern(string s) {
// 这个 if 自己没想起来
if(s.size() == 0)
{
return false;
}
int len = s.size();
int next[s.size()];
getNext(next,s);
// 这里的判断条件有一个不要漏了 next[len-1] != -1
if(len % (len - (next[len-1] + 1)) == 0 && next[len-1] != -1)
{
return true;
}
else
{
return false;
}
}
};