![](/img/trans.png)
[英]How to convert a string to a palindrome with minimum number of character replacement such that palindromic string contains a given word?
[英]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
}
您可以实现以下种类的蛮力算法:
如果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.