最短的回文

时间:2015-08-08 03:30:55

标签: java

我已经编写了代码,其中有String(最初不是回文!),我的方法必须将其转换为回文词。例如:

Given "aacecaaa", return "aaacecaaa".

Given "abcd", return "dcbabcd".

当我尝试"abcd"时,它只返回"dabcd",尽管事实上我还有一个辅助方法private static boolean check(String myString)来检查它是否已成为回文词。 我试图调试代码,问题出在方法private static boolean check(String myString)中,它甚至根本不进入循环!请问smb请帮我解决这个问题?

public class ConverToPalindrome {

    public static void main(String[] args){

        String myString = "abcd";
        String convert = shortestPalindrome(myString);
        System.out.println(convert);
    }

    public static String shortestPalindrome(String myString){
        String finalResult = "";
        String temp = "";
        for(int i = myString.length() - 1; i >= 0; i--){
            temp += myString.substring(i) + "" + myString;
            if(check(temp) == true){
                finalResult = temp;
                break;
            }
        }
        return finalResult;
    }

    private static boolean check(String myString){
        String temp = "";
        for(int i = myString.length() - 1; i >= 0; i--){
            temp += myString.charAt(i);
        }
        if(temp.equals(myString)){
            return true;
        }
        else{
            return false;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

更改

temp += myString.substring(i) + "" + myString;

temp = new StringBuffer(myString.substring(i)).reverse() + "" + myString;

您也可以按相反的顺序构建一个临时字符串(逐个字符),并将其与原始字符串组合,直到形成回文。

public static String shortestPalindrome(String myString) {
    String finalResult = "";
    String temp = "";
    String rev = "";
    for (int i = myString.length() - 1; i >= 0; i--) {
        rev += myString.charAt(i);
        temp = rev + myString;
        if (check(temp) == true) {
            finalResult = temp;
            break;
        }
    }
    return finalResult;
}