LeetCode 647 Palindromic Substrings

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;
    }

};

猜你喜欢

转载自blog.csdn.net/hello_my_coder/article/details/78751496