-
描述
-
所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一
个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回
文字符串。
-
输入
-
第一行给出整数N(0<N<100)
接下来的N行,每行一个字符串,每个字符串长度不超过1000.
输出
- 每行输出所需添加的最少字符数 样例输入
-
1 Ab3bd
样例输出
-
2
*******************************************************************************************************************************************************************************
这个题写了好久,一开始的思路就是求字符串a和a的逆序字符串的最长公共子序列。但算法不对头,我以为标记下逆序串的数字位序求
一下递增子序列就可以呢…………a:ab3db a`:bd3ba =>数字顺序:24351 =>求递增子串 结果各种wa!!!
后来发现算法错了……安百度说的写了下,然后就A了……
*******************************************************************************************************************************************************************************
#include<stdio.h> #include<stdlib.h> #include<string.h> char a[1010]; int s[1010][1010]; int max(int a,int b,int c) { a=a>b?a:b; return a>c?a:c; } int main() { int n,i,j,k,l,w; scanf("%d",&n); while(n--) { scanf("%s",a); l=strlen(a); for(i=0;i<1010;i++) s[i][0]=0; for(i=0;i<1010;i++) s[0][i]=0; for(j=1;j<=l;j++) { for(i=1;i<=l;i++) { w=a[i-1]==a[l-j]?1:0; s[i][j]=max(s[i-1][j-1]+w,s[i-1][j],s[i][j-1]); //printf("%d ",s[i][j]); } //printf("\n"); } printf("%d\n",l-s[l][l]); } //system("pause"); return 0; }
-
第一行给出整数N(0<N<100)
回文字符串
最新推荐文章于 2022-05-09 22:17:54 发布
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
4