459. 重复的子字符串
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
class Solution {
public:
void getnext(string& s,int *next)
{
int j = -1;
next[0] = j;
for (int i = 1; i < s.size(); i++)
{
while (j >= 0 && s[i] != s[j + 1])
{
j = next[j];
}
if (s[i] == s[j + 1]) j++;
next[i] = j;
}
}
bool repeatedSubstringPattern(string s) {
string::size_type len = s.size();
if (len == 0) return false;
int *next = new int[len];
getnext(s, next);
//找最小重复子串的长度 = 整个s的最长前缀的末尾到s末尾组成的字符串的长度
int res = next[len - 1];
if (res == -1) return false;
//最小重复子串的长度
int len1 = len - res - 1;
//长度可以被len整除 说明该字符串有重复的子字符串。
if (len % len1 == 0) return true;
else {
return false;
}
}
bool repeatedSubstringPattern1(string s)
{
//将两个字符拼在一起,去掉头部和尾部的一个字符,如果能找到原字符串 则说明由重复字符构成
string ss = s + s;
ss.erase(ss.begin());
ss.erase(ss.end() - 1);
const auto res = ss.find(s);
if (res != string::npos)
{
return true;
}
else
{
return false;
}
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具