题解 | #密码截取#

密码截取

https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

#include <iostream>
#include <vector>
using namespace std;

bool is_huiwen(string s){
    int n = s.size();
    for(int i = 0;i < n/2;i++){
        if(s[i] != s[n-i-1]){
            return false;
        }
    }
    return true;
}

int main() {
    string s;
    cin >> s;
    int n = s.size();
    vector<int> dp(n);

    dp[0] = 1;
    int max_l = dp[0];
    for(int i = 1;i < n;i++){
        if(i - dp[i-1] - 1 >= 0 && s[i] == s[i - dp[i-1] - 1]){
            dp[i] = dp[i-1]+2;
        }else{
            for(int j = i-dp[i-1];j <= i;j++){
                if(s[j] == s[i] && is_huiwen(s.substr(j,i-j+1))){
                    dp[i] = i-j+1;
                    break;
                }
            }
        }
        max_l = max(max_l,dp[i]);
    }
    cout << max_l;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

刷牛客的我很豁达:你是不是对算法有什么误解,你没手握两篇顶刊顶会,还想搞算法岗,有顶刊顶会在算法岗算才入门
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务