1. 程式人生 > >LeetCode 647 Palindromic Substrings

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