LeetCode(top100)重复的子字符串

重复的子字符串

题目描述

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过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; 
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值