# 459.重复的子字符串
| 题目类别 | 
|---|
| 字符串 | 
# 题目
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
# 示例
输入:"abab" 输出:True 解释:可由字符串“ab"重复两次构成
# 代码
- 利用正则表达式
 
var repeatedSubstringPattern = function(s) {
    let reg = /^(\w+)\1+$/ // \1 等于()中匹配的内容
    return reg.test(s)
};
 1
2
3
4
2
3
4
- 利用
repeat,周期串s 
var repeatedSubstringPattern = function(s) {
    let len = s.length;
    let i = 1;
    while(i <= len / 2) {
        if (len % i == 0 && s.slice(0, i).repeat(len/i) == s) {
            return true
        }
        i++;
    }
    return false
};
 1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 借用字符串进行巧妙解法
 
- 将原字符串给出拷贝一遍组成新字符串
 - 掐掉头尾留中间
 - 如果还包含原字符串,则满足题意
 
var repeatedSubstringPattern = function(s) {
    let s1 = (s + s).slice(1, -1);
    return s1.indexOf(s) != -1;
};
 1
2
3
4
2
3
4