https://leetcode-cn.com/problems/repeated-substring-pattern/
描述
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:
输入: "abab"
输出: True
解释: 可由子字符串 "ab" 重复两次构成。
示例 2:
输入: "aba"
输出: False
示例 3:
输入: "abcabcabcabc"
输出: True
解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
分析
直接循环找子串,再内部再次循环,如果遇到与字串不相同就跳出内部循环。如果没有跳出,说明找到了重复的子串。循环结束没有则直接返回false。使用了flag进行状态判断。
/**
* @param {string} s
* @return {boolean}
*/
var repeatedSubstringPattern = function(s) {
let len = s.length, count = 0
if (len <= 1) {
return false
}
while (len >> 1 > count) {
count++
if (len % count !== 0) {
continue
}
let sample = s.slice(0, count), flag = true // flag表示是否重复
for (let i = 0;i < len / count; i++) {
if (sample !== s.slice(i * count, (i + 1) * count)) {
flag = false
break
}
}
if (flag) {
return true
} else {
continue
}
}
return false
};
leetcode的dalao的另一种解法
var repeatedSubstringPattern = function(s) {
return (s + s).slice(1, -1).indexOf(s) >= 0
};