NYOJ-37-回文字符串

    xiaoxiao2021-04-16  36

    时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。 输入 第一行给出整数N(0<N<100) 接下来的N行,每行一个字符串,每个字符串长度不超过1000. 输出 每行输出所需添加的最少字符数 样例输入 1 Ab3bd 样例输出 2 思路:这道题其实和最长公共子序列是一样的,只不过要把字符串倒过来,麻烦了一点, 添加字符数 = 字符串长度 - LCS;

    #include <stdio.h>#include <string.h>#include <algorithm>int dp[1005][1005];int main(){ using namespace std; char str[1005]; str[0] = '#'; //这个#可以随便换; int n; scanf("%d",&n); int len; while(n--) { memset(dp,0,sizeof(dp)); scanf("%s",str+1); len = strlen(str); for(int i=1; i<len; i++) { for(int j=len-1; j>0; j--) { if(str[i] == str[j]) { dp[i][len-j] = dp[i-1][len-j-1]+1; } else { dp[i][len-j] = max(dp[i-1][len-j] , dp[i][len-j-1]); } } } printf("%d\n",len-1-dp[len-1][len-1]); } return 0;}

    转载请注明原文地址: https://ju.6miu.com/read-672696.html

    最新回复(0)