回文子串的数量
分析
首先写个暴力然后闯过去了
class Solution {
public:
bool ispara(string s) {
for (int i = 0; i < s.size() / 2; i++) {
if (s[i] != s[s.size() - i - 1])return false;
}
return true;
}
int countSubstrings(string s) {
int ans = 0;
ans += s.size();
for (int len = 2; len <= s.size(); len++) {
for (int st = 0; st + len <=s.size(); st++) {
string curStr = s.substr(st, len);
if (ispara(curStr))ans++;
}
}
return ans;
}
};
可以简单写个dp
dp[i][j]表示这个s[i,j]这个是不是回文子串
然后直接用这个dp计算答案就好了
class Solution {
public:
int dp[1010][1010];
int countSubstrings(string s) {
memset(dp, 0, sizeof(dp));
/*
dp[i][j]表示s[i,j]回文子串
*/
for (int len = 1; len <= s.size(); len++) {
for (int st = 0; st < s.size(); st++) {
int end = st + len - 1;
if (end >= s.size())continue;
dp[st][end] = (len == 1 || len == 2 || dp[st + 1][end - 1]) && (s[st] == s[end]);
}
}
int ans = 0;
for (int i = 0; i < s.size(); i++) {
for (int j = i; j < s.size(); j++) {
if (dp[i][j])ans++;
}
}
return ans;
}
};