簡體   English   中英

最短的回文

[英]Shortest Palindrome

我已經寫了代碼,其中有一個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;
        }
    }
}

更改

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM