public int[][] getDP(char[] str){
int[][] result = new int[str.length][str.length];
for(int i = str.length - 1; i >= 0; i--) {
for(int j = i; j < str.length; j++) {
if(i == j) {
result[i][j] = 0;
}else if(str[i] == str[j]) {
result[i][j] = result[i + 1][j - 1];
}else {
result[i][j] = Math.min(result[i+1][j], result[i][j-1]) + 1;
}
}
}
return result;
}
public String printPalindrome1(String str) {
if(str == null || str.length() == 0) return null;
char[] input = str.toCharArray();
int[][] DP = getDP(input);
//declare the result based on DP result
char[] result = new char[str.length() + DP[0][str.length()-1]];
int resl = 0;
int resr = result.length - 1;
int i = 0;
int j = str.length() - 1;
//System.out.println("j" + j);
while(i <= j && j < str.length()) {
if(input[i] == input[j]) {
result[resl++] = input[i++];
result[resr--] = input[j--];
}else if(DP[i+1][j] > DP[i][j-1]) {
//System.out.println("2 " + input[j]);
result[resl++] = input[j];
result[resr--] = input[j];
j--;
}else {
//System.out.println("3 " + input[i]);
result[resl++] = input[i];
result[resr--] = input[i];
i++;
}
}
return new String(result);
}
添加最少字符使字符串整体都是回文字符串
猜你喜欢
转载自blog.csdn.net/niukai1768/article/details/80726488
今日推荐
周排行