簡體   English   中英

Java:如何通過插入最少數量的字符來創建字符串的最短回文?

[英]Java: How to create the shortest palindrome of a string by inserting the minimum number of characters?

我目前有以下實現,該實現通過插入最少數量的字符來查找給定字符串中最短的回文,但是僅在最前面處理字符插入以創建最短的回文。

但是,通過以下實現或者如果還有更好的實現,我該如何在可將字符插入字符串的任何點以使其成為回文的情況下做到這一點?

將接受並支持答案。 謝謝

public class Answer {
    public String findShortestPalindrome(String s) {
        int len = s.length();
        if (len <= 1) {
            return s;
        }
        int i = len - 1;
        for (; i >= 0; --i) {
            if (stringIsPalindrome(s, 0, i)) {
                break;
            }
        }

        StringBuilder sb = new StringBuilder(s.substring(i + 1));
        sb.reverse().append(s);
        return sb.toString();
    }

    public boolean stringIsPalindrome(String s, int start, int end) {
        while (start < end) {
            if (s.charAt(start) != s.charAt(end)) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
}

差異尋找可處理字符串中任何點插入的最短回文。

您可以嘗試此解決方案。 這應該工作!

public boolean stringIsPalindrome(String s, int start, int end) {

    String str1 = s.substring(0,Math.floor((end-start)/2));
    String str2 = s.substring(Math.floor((end-start)/2),end);
    str2 = reverseString(str2);
    return str1.equals(str2);
}

public String reverseString(String s) {
            //YOUR REVERSE STRING METHOD
    }

您可以實現以下種類的蠻力算法:

  1. 如果輸入字符串為空或包含一個元素,則返回輸入
  2. 如果字符串的第一個字符等於最后一個字符,則對輸入的字符串應用此過程,而不使用第一個和最后一個項目
  3. 如果first與last不相同,則有兩個選擇:

     left = last + palindromed(input without last) + last or right = first + palindromed(input without first) + first 

    因此,在此步驟中,您選擇最短的解決方案

暫無
暫無

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

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