lc.647 回文子串+扩展
1.dp法
class Solution {
public:
int countSubstrings(string s) {
int count = 0;
vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));
for(int i = s.size()-1; i >= 0; i--)
{
for(int j = i; j < s.size(); j++)
{
if(s[i] == s[j] && (j - i <= 1 || dp[i+1][j-1]))
{
count++;
dp[i][j] = true;
}
}
}
return count;
}
};
2.中心扩散法
class Solution {
public:
int countSubstrings(string s) {
int res = 0;
for(int i = 0; i < s.size(); i++)
{
res += extend(s, i, i);
res += extend(s, i, i+1);
}
return res;
}
int extend(const string s, int l, int r)
{
int count = 0;
while(l >= 0 && r < s.size() && s[l] == s[r])
{
count++;
l--, r++;
}
return count;
}
};
3.中心扩散并输出
class Solution {
public:
string str;
int countSubstrings(string s) {
vector<string> ans;
int res = 0;
for(int i = 0; i < s.size(); i++)
{
str.clear();
res += extend(s, i, i, str, ans);
str.clear();
res += extend(s, i, i+1, str, ans);
}
for(auto i : ans)
cout << i << ' ';
return res;
}
int extend(const string s, int l, int r, string &str, vector<string>& ans)
{
int count = 0;
while(l >= 0 && r < s.size() && s[l] == s[r])
{
str = s.substr(l, r-l+1);
ans.push_back(str);
count++;
l--, r++;
}
return count;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具