柑橘味砖头


私信TA

用户名:uq_73696371690

访问量:473

签 名:

等  级
排  名 9020
经  验 1124
参赛次数 0
文章发表 17
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:正常模拟有点难以判断,但是这是一个经典的回文串,将字符串与自己的翻转串求最长公共子序列长度 ,字符串的长度减去最长子序列的长度 就是答案

注意事项:

参考代码:

#include<bits/stdc++.h>

using namespace std;

string s;

char s1[1010],s2[1010];

int dp[1010][1010];//i到j的最长公共子序列长度

int main()

{

    cin>>s;

    int n=s.size();

    for(int i=1;i<=n;i++) s1[i]=s[i-1];

    for(int i=n;i>=1;i--) s2[i]=s1[n-i+1];

    //找出最长公共子序列长度 n-最长就是答案

    //套一下LCS的模板

    for(int i=1;i<=n;i++){

        for(int j=1;j<=n;j++){

            if(s1[i]==s2[j]){

                dp[i][j]=dp[i-1][j-1]+1;

            }else{

                dp[i][j]=max(dp[i-1][j],dp[i][j-1]);

            }

        }

    }

    int ans=n-dp[n][n];

    cout<<ans<<endl;

    return 0;

}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区