zoukankan      html  css  js  c++  java
  • nyoj 37 回文字符串

    描述

    所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
    输入
    第一行给出整数N(0<N<100)
    接下来的N行,每行一个字符串,每个字符串长度不超过1000.
    输出
    每行输出所需添加的最少字符数
    样例输入
    1
    Ab3bd
    样例输出
    2

    思路:先将原序列逆序,得到一个新串,然后求出最长公共子序列,答案就是n-dp[n][n]

    AC代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 #define N 1006
     6 char s1[N];
     7 char s2[N];
     8 int dp[N][N];
     9 int main()
    10 {
    11     int t;
    12     scanf("%d",&t);
    13     while(t--){
    14         memset(dp,0,sizeof(dp));
    15         scanf("%s",s1);
    16         int len = strlen(s1);
    17         int index = 0 ;
    18         for(int i=len-1;i>=0;i--){
    19            s2[index++]=s1[i];
    20         }
    21         for(int i=0;i<len;i++){
    22            for(int j=0;j<len;j++){
    23               if(s1[i]==s2[j]){
    24                  dp[i+1][j+1]=dp[i][j]+1;
    25               }
    26               else{
    27                  dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);
    28               }
    29            }
    30         }
    31         printf("%d
    ",len-dp[len][len]);
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    字符串系列复习
    点分治总结
    LCT总结
    网络流总结
    centOS7下安装GUI图形界面
    周记 2014.10.8
    周记 2014.9.28
    周记 2014.9.20
    tar命令
    [转]bit与byte
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5432607.html
Copyright © 2011-2022 走看看