Given a string, your task is to count how many palindromic substrings in this string.
The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.
Example 1:
Input: “abc”
Output: 3
Explanation: Three palindromic strings: “a”, “b”, “c”.
Example 2:
Input: “aaa”
Output: 6
Explanation: Six palindromic strings: “a”, “a”, “a”, “aa”, “aa”, “aaa”.
Note:
The input string length won’t exceed 1000.
动态规划算法——求回文子串,关键的地方就是发现一个字符串i~j是回文字符串,那么s[i]==s[j]且串i+1~j-1也是回文字符串。两层遍历,时间复杂度为o(n^2)
class Solution {
public:
int countSubstrings(string s) {
vector < vector<int>> dp(s.size(), vector<int>(s.size(), 0));
int count = 0;
for (int i = s.size() - 1; i >= 0; i--) {
for (int j = i; j < s.size(); j++) {
if (i == j) {
dp[i][j] = 1;
count++;
}
else if (j - i == 1&&s[i]==s[j]) {
dp[i][j] = 1;
count++;
}
else if(s[i]==s[j]&&dp[i+1][j-1]){
dp[i][j] = 1;
count++;
}
else {
dp[i][j] = 0;
}
}
}
return count;
}
};
本文介绍了一种使用动态规划算法来计算给定字符串中所有不同回文子串数量的方法。通过实例展示了如何通过两层遍历实现算法,并解释了其时间复杂度为O(n^2)。
588

被折叠的 条评论
为什么被折叠?



