Given a non-empty string check if it can be constructed by taking a substring of it and appending multiple copies of the substring together. You may assume the given string consists of lowercase English letters only and its length will not exceed 10000.
Example 1:
Input: "abab" Output: True Explanation: It's the substring "ab" twice.
Example 2:
Input: "aba" Output: False
Example 3:
Input: "abcabcabcabc" Output: True Explanation: It's the substring "abc" four times. (And the substring "abcabc" twice.)
解題思路:
本題需要判別字符串是否由某個子串重複生成而來,將字符串切分爲能被該字符串整除的長度,然後暴力匹配,只要匹配到第一個符合條件的就返回true,若沒有則返回false。
class Solution {
public:
bool check(const string &s, int len, int k){
int TL = len/k;
for(int i = 1; i < TL; i++){
for(int j = 0; j < k; j++){
if(s[i * k + j] != s[j])return false;
}
}
return true;
}
bool repeatedSubstringPattern(string s) {
int len = s.length();
int flag = 0;
for(int k = 1; k <= len/2; k++){
if(len % k == 0){
if(check(s, len, k))return true;
}
}
return false;
}
};