459. 重复的子字符串
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
示例 1:
输入: s = "abab"
输出: true
解释: 可由子串 "ab" 重复两次构成。
示例 2:
输入: s = "aba"
输出: false
示例 3:
输入: s = "abcabcabcabc"
输出: true
解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
提示:
1 <= s.length <= 104
s 由小写英文字母组成
遍历:
func repeatedSubstringPattern(s string) bool {
if len(s)==0{
return false
}
for i:=1;i<len(s);i++{
if len(s)%i==0{ //当前位数是总长度的倍数
count:=len(s)/i //计算能重复几次
res:=""
for j:=0;j<count;j++{
res=res+s[0:i]
}
if res==s{
return true
}
}
}
return false
}
高手的题解:将字符串复制一倍,并去首去尾,若2倍后能包含此字符串,则说明可以通过由它的一个子串重复多次构成。
func repeatedSubstringPattern(s string) bool {
if len(s)==0{
return false
}
// 2倍的字符串,将首、尾位切掉,
newS:=(s+s)[1:len(s)*2-1]
// 查看是否能匹配
return strings.Contains(newS,s)
}