题解 | #密码截取#

密码截取

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

#include <iostream>
#include <string>
using namespace std;
//以i和i+1为中心向左右进行双指针延拓
int huiwen(const string& s,int l,int r){
    while(l>=0&&r<s.size()&&s[l]==s[r]){
        --l;++r;
    }
    return r-l-1;
}

int main() {
    string str;
    cin >> str;
    int n=str.size();
    int result=0;
    for(int i=0;i<n;++i){
        result=max(result,huiwen(str,i,i));
        result=max(result,huiwen(str,i,i+1));
    }
    cout << result;
}
// 64 位输出请用 printf("%lld")

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

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

全部评论

相关推荐

02-05 08:18
四川大学 Java
在思考的熊熊很讨厌吃香菜:不是,我门头沟学院呢?这都没排上?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务