【LeetCode】459. 重复的子字符串
题目链接:https://leetcode-cn.com/problems/repeated-substring-pattern/description/
题目描述
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000
示例
输入: “abab”
输出: True
解释: 可由子字符串 “ab” 重复两次构成。
输入: “abcabcabcabc”
输出: True
解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)
解决方法
题目较简单
class Solution {
public:
bool repeatedSubstringPattern(string s) {
for (int i=0;i<s.size();i++){
string subStr=s.substr(0,i+1);
if (repeatSubstr(s,subStr)) return true;
}
return false;
}
private:
bool repeatSubstr(string s,string sub){
replace_all_distinct(s,sub,"#");
if (s.size()==1) return false;
for (int i=0;i<s.size();i++){
if (s[i]!='#') return false;
}
return true;
}
private: //用new_value替换字符串中所有的old_value
string& replace_all_distinct(string& str, const string& old_value, const string& new_value)
{
for(string::size_type pos(0); pos!=string::npos; pos+=new_value.length())
{
if( (pos=str.find(old_value,pos)) != string::npos )
{
str.replace(pos,old_value.length(),new_value);
}
else { break; }
}
return str;
}
};
还没有评论,来说两句吧...