侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

密码截取

Hope
2022-03-26 / 0 评论 / 1 点赞 / 429 阅读 / 545 字
温馨提示:
本文最后更新于 2022-03-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

密码截取

思路:

Dp 递推 ,f[i][j] 满足回文串要求 f[i + 1][j - 1] 也是回文串 同时 s[i] == s[j]。

代码:

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

int main(){
    string s;
    cin>>s;
    int n = s.size();
    vector<vector<bool>> f(n,vector<bool> (n));
    int res = 0;
    //f[i][j] 满足回文串要求 f[i + 1][j - 1] 也是回文串 同时 s[i] == s[j]
    for(int j = 0; j < n; j++){
        for(int i = 0;i <= j ; i++){
            if(i == j) f[i][j] = true;
            else if(s[i] == s[j]){
                //只有两个字母 或者满足条件
                if(i + 1 > j - 1 || f[i + 1][j - 1]) f[i][j] = true;
                //res = max(res,i - j + 1);
            }
        }
    }
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++){
            if(f[i][j]) res = max(res,j - i + 1);
        }
    cout<<res;
    return 0;
}
1

评论区