判断重复子字符串(一般方法 和 高效判断法)
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断重复子字符串(一般方法 和 高效判断法)相关的知识,希望对你有一定的参考价值。
题目
解题思路
- 一般的解法:枚举子串长度,然后再对字符串进行验证,验证它是否是由这些子串组成。
- 数学法:假设母串
S
是由子串s
重复N
次而成, 则S+S
则有子串s
重复2N
次, 那么现在有:S=Ns
,S+S=2Ns
, 其中N>=2
。 如果条件成立,S+S=2Ns
, 掐头去尾破坏2个s
,S+S
中还包含2*(N-1)s
, 又因为N>=2
, 因此S
在(S+S)[1:-1]
中必出现一次以上。
一般方法O(n^2)
class Solution {
public:
bool repeatedSubstringPattern(string s) {
int n = s.size();
for(int len = 1;len<=n/2;len++){
if(n%len!=0)
continue;
string t = s.substr(0,len);
bool flag = true;
for(int j=len;j<n;j+=len){
string sub = s.substr(j,len);
if(sub!=t){
flag = false;
break;
}
}
if(flag)
return true;
}
return false;
}
};
数学方法O(n)
class Solution {
public:
bool repeatedSubstringPattern(string s) {
return (s+s).find(s,1)!=s.size();
}
};
以上是关于判断重复子字符串(一般方法 和 高效判断法)的主要内容,如果未能解决你的问题,请参考以下文章
javascript 判断数组中的重复内容的两种方法 by FungLeo
LeetCode T3.Longest Substring Without Repeating Characters/无重复最长子串