• nyoj-回文字符串--动态规划


    回文字符串

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
     
    描述
    所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
     
    输入
    第一行给出整数N(0<N<100)
    接下来的N行,每行一个字符串,每个字符串长度不超过1000.
    输出
    每行输出所需添加的最少字符数
    样例输入
    1
    Ab3bd
    样例输出
    2
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 using namespace std;
     5 int dp[1002][1002];
     6 char a[1002],b[1002];
     7 int len;
     8 int min_huiwenchuan(char *a,char *b)
     9 {
    10     int i,j;
    11     for(i=1;i<=len;i++)
    12     {
    13         for(j=1;j<=len;j++)
    14         {
    15             if(a[i-1]==b[j-1])
    16                 dp[i][j]=dp[i-1][j-1]+1;
    17             else
    18                 dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
    19         }
    20     }
    21     return len-dp[len][len];
    22 }
    23 int main()
    24 {
    25 
    26     int N,i;
    27     scanf("%d",&N);
    28     while(N--)
    29     {
    30         scanf("%s",&a);len=strlen(a);
    31         for(i=0;i<len;i++)
    32         b[len-i-1]=a[i];
    33         memset(dp,0,sizeof(dp));
    34         printf("%d
    ",min_huiwenchuan(a,b));
    35     }
    36     return 0;
    37 }
    View Code

    就是把此题把字符串逆转,然后转化为最长公共子序列问题,再然后用总的长度减去最长公共子序列数,就ok了

  • 相关阅读:
    ssm 在不同的数据库中进行切换(开启事物禁用)
    引入xfire-all.jar后导致sping配置异常
    单点登录cas的最简单使用
    win10下cmd命令不能用
    前端json 两个重要的方法
    maven 工程下第三方jar 包的引入和打包 war
    idea 中main 方法不能运行
    从sqlServer 分页查询谈${}和#{}
    can与could区别
    线程同步与异步区别
  • 原文地址:https://www.cnblogs.com/zsj-93/p/3174928.html
Copyright © 2020-2023  润新知