我目前有以下实现,通过插入最少数量的字符来处理找到给定字符串的最短回文,但只处理前面中的字符插入以创建最短的回文。
但是通过以下实现或者如果有更好的实现,我怎么能这样做,可以在字符串中的任何点插入字符以使其成为回文?
接受并提出答案。谢谢
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;
}
}
差分 寻找最短的回文处理,以处理字符串中任何一点的插入。
答案 0 :(得分:1)
你可以尝试这个解决方案。这应该有效!
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 :(得分:0)
您可以实施以下类型的暴力算法:
如果第一个与上一个不一样,那么您有两个选择:
left = last + palindromed(input without last) + last or
right = first + palindromed(input without first) + first
所以在这一步你选择最短的解决方案