题解 | #密码截取#

#include <bits/stdc++.h>

using namespace std;

int getLength(string str, int l, int r){
    while(l >= 0 && r < str.size() && str[l] == str[r]){
        l--;
        r++;
    }
    
    return r - l - 1;
}

//最大回文子串
void process(string str, int& res){
    //dp[i][j]:字符串s在[i, j]范围内最长的回文子串的长度为dp[i][j]。
    int n = str.size();
    vector<vector<bool>> dp(n, vector<bool>(n, false));
    for(int i = 0; i < n; i++){
        dp[i][i] = true;//一个字符的回文子序列长度就是1。
    }
    
    for(int i = n - 1; i >= 0; i--){
        for(int j = i; j < n; j++){ //
            if(str[i] == str[j]){
                if(j - i <= 2){
                    dp[i][j] = true; //
                }
                else{
                    dp[i][j] = dp[i + 1][j - 1];
                }
            }
            
            //取最长回文子串
            if(dp[i][j] && j - i + 1 > res){
                //s = str.substr(i, j - i + 1);
                res = j - i + 1;
            }
        }
    }
    
    /*//中心扩展法
    int n = str.size();
    for(int i = 0; i < n; i++){
        //ABA
        int l1 = getLength(str, i, i);
        //ABBA
        int l2 = getLength(str, i, i + 1);
        
        res = max(res, l1 > l2 ? l1 : l2);
    }*/
}

int main(){
    string str = "";
    cin >> str;
    int res = 0;
    process(str, res);
    
    cout << res << endl;
    
    return 0;
}
全部评论

相关推荐

那么好了好了:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
04-06 16:59
已编辑
河南工业大学 Java
牛牛牛的牛子:最好扔了,实在没有选择的选择
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务