【LeetCode】459. 重複的子字串
阿新 • • 發佈:2018-11-12
題目連結: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;
}
};