题目:
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.)
解释:
对于这种重复的问题,就考虑复制,把原字符串复制一遍拼接在其后得到新字符串,如果新的字符串的子字符串[1::1]中能找到原字符串,就返回true,否则返回false。
解释:
因为如果是重复的模式,那么再开头截掉一个重复单元拼接到后面,一定和原字符串相等,但是我们无需做裁剪和拼接,直接复制原字符串就完成了类似的操作。
python代码:
class Solution(object):
def repeatedSubstringPattern(self, s):
"""
:type s: str
:rtype: bool
"""
if not s:
return False
ss=s+s
return ss[1:-1].find(s)!=-1
c++代码:
class Solution {
public:
bool repeatedSubstringPattern(string s) {
string ss=s+s;
string sub=ss.substr(1,ss.size()-2);
return sub.find(s)!=string::npos;
}
};
总结:
注意要去掉ss的第一个字符和最后一个字符,如果不去掉的话,一定能在ss中找到s的。