很经典的动态规划求最长回文串长度的问题

using namespace std;
int solve(string s){
    int res = 0;
    int length = s.size();
    if(length == 1) return 1;
    vector<vector<bool>>dp(length,vector<bool>(length,false));
    for(int i = 0;i<length;i++){
        dp[i][i] = true;
        if(i<length-1){
            if(s[i] == s[i+1]){
                dp[i][i+1] = true;
                res = 2;
            }
        }
    }//需要先将对角线(len==1)和长度为2的len的回文状态确定
    
    for(int len = 3;len<=length;len++){
        for(int i = 0;i+len-1<length;i++){
            int j = i+len-1;
            if(s[i] == s[j]&&(dp[i+1][j-1])){

                    dp[i][j] = true;
                    res = len;

            }
        }
    }

    return res;
}
int main(){
    string s;
    while(cin>>s){
        int result = solve(s);
        cout<<result<<endl;
    }

    return 0;
}