回文字符串(LCS变形)

Posted wsy107316

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回文字符串(LCS变形)相关的知识,希望对你有一定的参考价值。

回文字符串

技术图片

 

 思路:由于要找最少添加的字符使得原字符串变为回文串,那么先将给出的字符串反转,将两字符串做 LCS,得到的是最大的公共子串的长度,那么用字符串长度减去最大公共子串长度就是最少添加字符的个数

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstring>
 5 #include <string>
 6 #include <cmath>
 7 #include <cstdlib>
 8 #include <algorithm>
 9 using namespace std;
10 typedef long long ll;
11 const int maxn = 1010;
12 
13 char s[maxn],ss[maxn];
14 int dp[maxn][maxn];
15 
16 int main()
17 {
18     scanf("%s",s);
19     int len1=strlen(s);
20     for(int i=0;i<len1;i++){
21         ss[i]=s[len1-i-1];
22     }
23 
24     for(int i=1;i<=len1;i++){
25         for(int j=1;j<=len1;j++){
26             if( s[i-1]==ss[j-1] ) dp[i][j]=dp[i-1][j-1]+1;
27             else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
28         }
29     }
30     printf("%d
",len1-dp[len1][len1]);
31     return 0;
32 }

 

以上是关于回文字符串(LCS变形)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(LCSி)最长公共子序列&变形应用

51nod 1092(lcs)回文字符串

UVa 11404 回文子序列(LCS求最长回文串长度)

笔试题之构造回文(LCS问题)2017腾讯暑假校招

P1435 回文字串(LCS问题)

POJ - 1159 Palindrome(回文变形)