添加最少字符使字符串整体都是回文字符串

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