7-6 回文串问题 (25 分)

题目描述:

一个字符串,如果从左到右读和从右到左读是完全一样的,比如"aba",我们称其为回文串。现在给你一个字符串,可在任意位置添加字符,求最少添加几个字符,才能使其变成一个回文串。

输入格式:
任意给定的一个字符串,其长度不超过1000.

输出格式:
能变成回文串所需添加的最少字符数。

输入样例:
在这里给出一组输入。例如:

Ab3bd
Abb
输出样例:
在这里给出相应的输出。例如:

2
1

分析:

这个题其实如果读懂了方法其实挺简单的。
就是一个将原字符串和逆序的字符串的最长公共子序列求出来。
所求得的值就是已经匹配的字符串。
然后用长度减去已经匹配的字符串长度,即为答案。
所以,这里有一个求最长公共子序列的dp问题。
参考dp博客: https://blog.csdn.net/someone_and_anyone/article/details/81044153
参考博客:https://blog.csdn.net/qq_33435265/article/details/51242588
AC代码:

#include 
#include"cstdio"
#include"iostream"
#include"string.h"
#include"algorithm"
    using namespace std;
char str[1001];
int dp[1001][1001];
int main()
{

    memset(dp,0,sizeof(dp));
    char str1[1001];
    scanf("%s",str);
    int len=strlen(str);
    int j=len-1;
    for(int i=0;i
分析:

同时这其实就是一个求最长公共回文串的dp。
参考博客:https://www.cnblogs.com/AndyJee/p/4465696.html

你可能感兴趣的:(天梯,dp,C语言,dp)