首页 > 代码库 > HDU 1513 Palindrome
HDU 1513 Palindrome
题目就是给一个字符串问最少插入多少个字符能让原字符串变为回文字符串。
算法:
用原串的长度减去原串与翻转后的串的最大公共字串的长度,就是所求答案。
1 //#define LOCAL 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 #include <cstring> 6 using namespace std; 7 8 const int maxn = 5000 + 5; 9 char s1[maxn], s2[maxn];10 int dp[2][maxn];11 12 void Reverse(char str[], int len)13 {14 int i, t;15 for(i = 0; i < len/2; ++i)16 {17 t = str[i];18 str[i] = str[len - 1 - i];19 str[len - 1 - i] = t;20 }21 }22 23 int main(void)24 {25 #ifdef LOCAL26 freopen("1513in.txt", "r", stdin);27 #endif28 int len;29 while(scanf("%d", &len) == 1)30 {31 scanf("%s", s1);32 memcpy(s2, s1, sizeof(s1));33 Reverse(s2, len);34 int i, j;35 memset(dp, 0, sizeof(dp));36 int cur = 1,ans;37 for(i = 1; i <= len; ++i)38 {39 for(j = 1; j <= len; ++j)40 {41 if(s1[i-1] == s2[j-1])42 dp[cur][j] = dp[1-cur][j-1] + 1;43 else44 dp[cur][j] = max(dp[1-cur][j], dp[cur][j-1]);45 }46 cur = 1 - cur;47 }48 ans = len - dp[len&1][len];49 printf("%d\n", ans);50 }51 return 0;52 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。