# 459. 重复的子字符串

/*
 * @lc app=leetcode.cn id=459 lang=javascript
 *
 * [459] 重复的子字符串
 */

// @lc code=start
/**
 * @param {string} s
 * @return {boolean}
 */
// var repeatedSubstringPattern = function(s) {
//   if (s === 1) return true;

//   const midLength = Math.floor(s.length / 2);
//   let canRepeat = false;

//   dfs(s, s[0], 1);
//   return canRepeat;

//   /**
//    *
//    * @param {字符串} code
//    * @param {子串} str
//    * @param {循环子串的下一个开始索引} end
//    * @returns
//    */
//   function dfs(code, str, end) {
//     const length = str.length;
//     if (length > midLength) return; // 表示字符串超过 不可能存在重复
//     const next = code.substring(end, end + length);

//     if (next !== str) {
//       // 表示子串已经存在不同的 停止循环
//       const sonStr = code.substr(0, length + 1);
//       dfs(code, sonStr, length + 1);
//       return;
//     } else if (end + length === code.length) return (canRepeat = true); // 表示可重复
//     dfs(code, str, end + length);
//   }
// };

var repeatedSubstringPattern = function(s) {
  const length = s.length;

  for (let i = 1; i * 2 <= length; i++) {
    if (length % i === 0) {
      let match = true;
      for (let j = i; j < length; j++) {
        console.log(s.charAt(j), s.charAt(j - i), j, i, j - i);
        if (s.charAt(j) !== s.charAt(j - i)) {
          match = false;
          break;
        }
      }

      if (match) {
        return true;
      }
    }
  }

  return false;
};

console.log(repeatedSubstringPattern("ababab"));
// console.log(repeatedSubstringPattern("bbb"));
// console.log(repeatedSubstringPattern("babab"));
// console.log(repeatedSubstringPattern("abcabcabcabc"));
// console.log(repeatedSubstringPattern("abac"));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Last Updated: 6/27/2023, 7:40:45 PM