我已经编写了代码,其中有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;
}
}
}
答案 0 :(得分:2)
更改
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;
}