标签:des style blog http color java os strong
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 52543 | Accepted: 18113 |
Description
Input
Output
Sample Input
5 Ab3bd
Sample Output
2
Source
</pre></p><p><pre name="code" class="java">import java.util.Arrays; import java.util.Scanner; public class POJ1159_ieayoio { static String s; public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int le = cin.nextInt(); s = cin.next(); short[][] f = new short[le + 5][le + 5]; for (int i = 0; i < f.length; i++) { Arrays.fill(f[i], (short) 0); } for (int i = 1; i <= le; i++) { f[0][i] = (short) (le - i + 1); } for (int i = 1; i <= le; i++) { f[i][le + 1] = (short) i; } for (int i = 1; i <= le; i++) for (int j = le; j >= i; j--) { if (s(i) == s(j)) f[i][j] = f[i - 1][j + 1]; else { f[i][j] = (short) Math.min(f[i - 1][j] + 1, f[i][j + 1] + 1); } } int min = Integer.MAX_VALUE; for (int i = 1; i <= le - 1; i++) { if (min > f[i][i + 1]) min = f[i][i + 1]; } for (int i = 1; i <= le; i++) { if (min > f[i][i]) min = f[i][i]; } System.out.println(min); } } static char s(int i) { return s.charAt(i - 1); } }
题目大意:求一个字符串最少添加几个字符可以变成回文串
我的思路就是f[i][j]表示左端数第i个字符,左端数在i右端的第j个字符,不过我开始只是觉得和最长公共子序列很像,没想到另一种方法就是求这个字符串和它逆串的最长公共子序列,然后再用总长度减去最长公共子序列的长度即为所求
POJ1159,Palindrome,布布扣,bubuko.com
标签:des style blog http color java os strong
原文地址:http://blog.csdn.net/ieayoio/article/details/38379435