题目描述
求最少增加几个字符使得给定的字符串形成回文串
字符串长度 (1<=|s|<=5000)
输入
第一行一个整数表示输入字符串长度
第二行一个字符串
第二行一个字符串
输出
输出最少增加几个字符使得给定的字符串形成回文串
样例输入 Copy
样例输出 Copy
来源/分类
import java.util.Scanner;
//1245
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String s = scanner.next();
int result = minAddToMakePalindrome(s);
System.out.println(result);
}
public static int minAddToMakePalindrome(String s) {
int n = s.length();
int[][] dp = new int[n][n];
for (int i = n - 1; i >= 0; i--) {
for (int j = i + 1; j < n; j++) {
if (s.charAt(i) == s.charAt(j)) {
dp[i][j] = dp[i + 1][j - 1];
} else {
dp[i][j] = Math.min(dp[i + 1][j], dp[i][j - 1]) + 1;
}
}
}
return dp[0][n - 1];
}
}