Every day a leetcode
题目来源:459. 重复的子字符串
解法1:枚举
枚举子字符串的长度len,并对字符串s进行遍历来判断字符串s是否由长度为len的重复的子字符串构成。
代码:
/*
* @lc app=leetcode.cn id=459 lang=cpp
*
* [459] 重复的子字符串
*/
// @lc code=start
class Solution
{
public:
bool repeatedSubstringPattern(string s)
{
int n = s.size();
for (int len = 1; len <= n / 2; len++)
{
if (n % len == 0)
{
bool match = true;
for (int i = len; i < n; i++)
{
if (s[i] != s[i - len])
{
match = false;
break;
}
}
if (match)
return true;
}
}
return false;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n2),其中 n 是字符串s 的长度。枚举 i 的时间复杂度为O(n),遍历 s 的时间复杂度为O(n),相乘即为总时间复杂度。
空间复杂度:O(1)。
解法2:KMP
详情见于官方题解Leetcode459. 重复的子字符串。