一、问题描述:
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.)
二、解决思路:
重复的数目最大是k/2个,用两个指针p,q,相差i(1<i<k/2) , 依次游走,如果发现p和q指向的元素不同,break. 如果此时q指向了数组末端,说明发现了repeat pattern, 返回true.
三、代码:
public class Solution {
public boolean repeatedSubstringPattern(String str) {
boolean flag = false;
int num = str.length();
for (int k = 1; k < num / 2 + 1; k++) {
for (int i = 0, j = i + k; i < num - k; i++, j++) {
if (str.charAt(i) != str.charAt(j)) {
break;
}
if (j == num - 1) {
return true;
}
}
}
return flag;
}
}