重复的子字符串
题目描述
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
题目分析
输入: “abab”
输出: True
解释: 可由子字符串 “ab” 重复两次构成~
输入: “aba”
输出: False
思路(一)
采用正则表达式匹配的方式,以输入s=‘abcabcabc’为例,其中(\w+)为捕获组即匹配第一组abc,\1为匹配括号中的内容的一次重复,即第二个abc,’+'代表\1的内容至少出现一次,^和$为首尾匹配
注意:()捕获组,以及\1重复一次的搭配使用
/**
* @param {string} s
* @return {boolean}
*/
var repeatedSubstringPattern = function(s) {
return (/^(\w+)\1+$/).test(s)
};
思路(二)
s = abc|abc; // 2abc
s+s = abc|abc|abc|abc; // 4abc
s1 = a|bcabcabcab|c = bcabcabcab; // bc + 2*abc + ab
s1中依然包含s,则s是重复的字符串
/**
* @param {string} s
* @return {boolean}
*/
var repeatedSubstringPattern = function(s) {
//将原字符串给出拷贝一遍组成新字符串;
//掐头去尾留中间;
//如果还包含原字符串,则满足题意。
var s1=s.concat();
var s2=(s + s1);
var s3=s2.slice(1,-1);
return s3.indexOf(s)!=-1;
};