一:题目
二:上码
class Solution {
public:/**思路:a b c a b c a b c a b cnext[i] 0 0 0 1 2 3 4 5 6 7 8 9i 0 1 2 3 4 5 6 7 8 9 10 11 length:12next[length-1]:next[11] = 9length - next[length-1] = 3;//求出我们的单个字符串如果length % (length - next[length-1]) == 0 那么的话 我们就可以确定我们有多少个字符串。*///求出前缀表void getIndex(int *next,string s) {int j = 0;//前缀表的末尾next[0] = 0;//只有一个字符的for (int i = 1; i < s.size(); i++) {//i是后缀表的末尾while (j > 0 && s[i] != s[j]) {//处理字符不一致的问题j = next[j-1]; //找前一个元素对应的最长公共前后缀 作为其下标 再进行匹配 }if (s[i] == s[j]) j++;next[i] = j;//处理子串对应的最长公共前后缀}}bool repeatedSubstringPattern(string s) {if (s.size() == 0) return false;int next[s.size()];getIndex(next,s);int length = s.size();//保证我们的包含最后一个元素的子串是有最长公共前后缀的//if ( next[length-1] != 0 && length % (length - next[length-1]) == 0) {return true;}return false;}
};