• 459.重复的子字符串 :::info 数组长度减去最长相同前后缀的长度相当于是第一个周期的长度,也就是一个周期的长度,如果这个周期可以被整除,就说明整个数组就是这个周期的循环。 ::: 重复的子字符串 - 图1
      代码:(详细注释)
      1. class Solution {
      2. public:
      3. void getNext (int* next, const string& s){
      4. next[0] = 0;
      5. int j = 0;
      6. for(int i = 1;i < s.size(); i++){
      7. while(j > 0 && s[i] != s[j]) {
      8. j = next[j - 1];
      9. }
      10. if(s[i] == s[j]) {
      11. j++;
      12. }
      13. next[i] = j;
      14. }
      15. }
      16. bool repeatedSubstringPattern (string s) {
      17. if (s.size() == 0) {
      18. return false;
      19. }
      20. int next[s.size()];
      21. getNext(next, s);
      22. int len = s.size();
      23. if (next[len - 1] != 0 && len % (len - (next[len - 1] )) == 0) {
      24. return true;
      25. }
      26. return false;
      27. }
      28. };
      分析:
      没有减一的算法。