LeetCode 题解 | 459. 重复的子字符串(find函数 C++)

题目描述(简单难度)

原题链接
LeetCode 题解 | 459. 重复的子字符串(find函数 C++)_第1张图片

算法

原理:

  1. 在字符串 s 后面再接一段 s,然后从下标为 1 的位置开始匹配,直到匹配子串 s(返回匹配子串 s 的第一个字符的下标)
  2. 如果字符串 s 是重复的,则返回的下标一定小于 s.size( )
    LeetCode 题解 | 459. 重复的子字符串(find函数 C++)_第2张图片

时间复杂度是 O ( n ∗ m ) ? O(n*m)? O(nm)?,空间复杂度是 O ( 1 ) O(1) O(1)

Note1:find 函数的时间复杂度我不是很确定,见讨论C++string中find函数是用什么算法实现的?他的时间复杂度如何?实际比手写KMP效率相比如何?
Note2:还可以尝试使用KMP算法解决 参考题解

C++代码

class Solution {
     
public:
    bool repeatedSubstringPattern(string s) {
     
        return (s + s).find(s, 1) < s.size();
    }
};

你可能感兴趣的:(LeetCode)