周期串为s,那么设定t表示周期,值在[1,len(s)-1]的范围,那么剩下的就是依次对每个t值进行遍历看是否真的满足周期为t,数学中周期的表达式是
\begin{aligned} f(x+t)=f(x) \end{aligned}
f(x+t)=f(x)
那么代码中可以这样写s[i%t]==s[i]
//方法1
bool repeatedSubstringPattern(string s) {
int len=s.size(),i=0,t=0;
for(t=1;t<=len/2;++t)
{
if (len%t) continue; // 有余数,一定不为周期串
for (i=t;i<len&&s[i%t]s[i];++i);
if (ilen) return true;
}
return false;
}
//方法2
//理解:从1位置开始查找,假如是重复字符串的,那么在doubleS中查找s,就必然在s.lenth + 1之前的位置,能够查找到s
class Solution {
public:
bool repeatedSubstringPattern(string s) {
return (s + s).find(s, 1) != s.size();
}
};