# 459.重复的子字符串

题目类别
字符串

# 题目

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。

# 示例

输入:"abab" 输出:True 解释:可由字符串“ab"重复两次构成

# 代码

  1. 利用正则表达式
var repeatedSubstringPattern = function(s) {
    let reg = /^(\w+)\1+$/ // \1 等于()中匹配的内容
    return reg.test(s)
};
1
2
3
4
  1. 利用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
  1. 借用字符串进行巧妙解法
  • 将原字符串给出拷贝一遍组成新字符串
  • 掐掉头尾留中间
  • 如果还包含原字符串,则满足题意
var repeatedSubstringPattern = function(s) {
    let s1 = (s + s).slice(1, -1);
    return s1.indexOf(s) != -1;
};
1
2
3
4