回文子串数

问题理解

找出给定字符串的回文子串数。

class Solution {
public:
    int countSubstrings(string s) {
        vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));
        int result = 0;
        for (int i = s.size() - 1; i >= 0; i--) {
            for (int j = i; j < s.size(); j++) {
                if (s[i] == s[j]) {
                    if (j - i <= 1) {
                        result++;
                        dp[i][j] = true;
                    } else if (dp[i + 1][j - 1]) {
                        result++;
                        dp[i][j] = true;
                    }
                }
            }
        }
        return result;
    }
};

最长回文子序列

问题理解

找出给定字符串中最长的回文子序列。

动态规划思路

dp数组:[i,j]的回文子序列的长度;

class Solution {
public:
    int longestPalindromeSubseq(string s) {
     vector<vector<int>> dp(s.size(),vector<int >(s.size(),0));
     for(int i=0;i<s.size();i++) dp[i][i]=1;
        for(int i=s.size()-1;i>=0;i--){
            for(int j=i+1;j<s.size();j++){
                if(s[i]==s[j])
                    
                    dp[i][j]=dp[i+1][j-1]+2;
                   
                    else 
                        dp[i][j]=max(dp[i][j-1],dp[i+1][j]);
                    
                }
            }
            return dp[0][s.size()-1];
        }
        
};
posted on 2025-12-23 12:42  FAfa_C++  阅读(0)  评论(0)    收藏  举报