回文字符串
来源:互联网 发布:ff14国际服数据库app 编辑:程序博客网 时间:2024/06/03 00:45
回文字符串
时间限制:3000 ms | 内存限制:65535 KB
<div class="problem-ins">难度:<span class="editable highlight">4</span></div> </div> <dl class="problem-display"> <dt>描述 </dt> <dd>所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。</dd> <div class="clr"></div> <dl class="others"> <dt>输入</dt> <dd>第一行给出整数N(0<N<100)<br>
接下来的N行,每行一个字符串,每个字符串长度不超过1000.
1
Ab3bd
2
</dl>
//先求出输入字符串的逆序列,求出两个字符串的最长子序列的长度,用总长度减去最长子序列的长度,就是需要补充的字符的个数#include<stdio.h>#include<string.h>int result = 0;short c[1001][1001];int max(int a,int b){ return a>b?a:b;}void LCS(char *str1,char *str2,int m,int n){ int i,j; result = 0; for(i = 0;i<=m;i++) { c[0][i] = 0; } for(i = 0;i<=n;i++) { c[i][0] = 0; } for(i = 1;i<=n;i++) { for(j = 1;j<=m;j++) { if(str2[i-1] == str1[j-1]) { c[i][j] = c[i-1][j-1] + 1; result = max(c[i][j],result); } else if(c[i-1][j]>=c[i][j-1]) { c[i][j] = c[i-1][j]; } else { c[i][j] = c[i][j-1]; } } } }void reverse(char *str1,char *str2){ int i,k = 0; for(i = strlen(str1)-1;i>=0;i--) str2[k++] = str1[i]; str2[k] = '\0';}int main(){ int n; char str1[1000]; char str2[1000]; int max; scanf("%d",&n); while(n--) { scanf("%s",str1); reverse(str1,str2); LCS(str1,str2,strlen(str1),strlen(str2)); printf("%d\n",strlen(str1)-result); }}
阅读全文
0 0
- 还是回文 && 回文字符串
- 字符串回文
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 字符串回文
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- Kefa and Dishes CodeForces
- 1065: 合唱队形(最长上升,下降子序列)
- 定义和实现接口
- 未对的题[更新中]
- 条码扫描
- 回文字符串
- LibreOJ #6165. 一道水题
- 二叉树-前序遍历
- bzoj 1304(树形dp)
- 一句话概括hashMap底层
- 设计模式--装饰器(Decorator)模式
- A Simple Problem with Integers POJ
- 进程的周期Sched
- UVA 1635 Irrelevant Elements(杨辉三角+递推式求组合数+算数基本定理)