1. 程式人生 > >【LeetCode】459. 重複的子字串

【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; } };