题目简介:
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:
1 2 3 4 5
| 输入: "abab"
输出: True
解释: 可由子字符串 "ab" 重复两次构成。
|
示例 2:
示例 3:
1 2 3 4 5
| 输入: "abcabcabcabc"
输出: True
解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
|
思路:
若字符串可以由子串重复构成,那我们可以去找每次与s[0]
相同的字符的位置pos
,(即s[0 ... pos - 1]
为待验证的子串)。
若所有出现重复字符位置的pos
所构成的子串都无法满足要求(即与后面的子串不相等),即返回false
。
否则,返回true
。
tip:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class Solution { public:
bool judge(string& s, int pos){
if(pos == -1) return false;
string sub_str = s.substr(0, pos + 1);
for(int i = pos + 1; i < s.size(); i += (pos + 1)){
if(s.substr(i, pos + 1) != sub_str) return false; }
return true; }
bool repeatedSubstringPattern(string s) {
int first = s[0]; int pos = -1;
for(int i = 1; i < s.size(); i++){
if(s[i] == s[0]){
pos = i - 1;
if(judge(s, pos)) return true; } }
return false; } };
|