判断重复子字符串(一般方法 和 高效判断法)

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断重复子字符串(一般方法 和 高效判断法)相关的知识,希望对你有一定的参考价值。

题目

在这里插入图片描述

解题思路

  • 一般的解法:枚举子串长度,然后再对字符串进行验证,验证它是否是由这些子串组成。
  • 数学法:假设母串 S 是由子串 s 重复 N 次而成, 则 S+S 则有子串 s 重复 2N 次, 那么现在有: S=NsS+S=2Ns , 其中N>=2 。 如果条件成立, S+S=2Ns , 掐头去尾破坏 2个sS+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/无重复最长子串

贪心算法的理解

3. [数组][滑动窗口]无重复字符的最长子串

python判断字符串(string)是不是包含(contains)子字符串的方法的代码