有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    改变

    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;
    }