问题:
- 开发一种递归算法来确定较长的单词或短语中是否隐藏着回文。回文是一个单词或短语,从左到右阅读和从右到左阅读时具有相同的字母序列,忽略空格(例如,
Some like cake,但我更喜欢ie
包含回文我更喜欢 pi
)。
下面是我的代码:
public class e125 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int i = 0;
String sLine = "Some like cake, but I prefer pie";
sLine.replaceAll("\\s+", "");
System.out.println(PlainRet(sLine, i));
}
public static String PlainRet(String sLine, int i) {
int nNum;
char c = 0;
String sPlain = "";
if (i >= sLine.length()) {
return "No Plaindrome";
}
c = sLine.charAt(i);
nNum = Isgood(sLine, c, i);
if (nNum != 0) {
for (; i < nNum; i++) {
sPlain += sLine.charAt(i);
}
return sPlain;
}
return PlainRet(sLine, i + 1);
}
public static int Isgood(String sLine, char c, int i) {
for (int j = i + 1; j < sLine.length(); j++) {
if (Character.toUpperCase(sLine.charAt(j)) == Character.toUpperCase(c)) {
if (Isplain(sLine, i, j)) {
return j;
}
}
}
return 0;
}
public static boolean Isplain(String sLine, int i, int j) {
if (Character.toUpperCase(sLine.charAt(j)) != Character.toUpperCase(sLine.charAt(i))) {
return false;
}
else if (i == j || j == i + 1) {
return true;
}
return (Isplain(sLine, i + 1, j - 1));
}
}
我不断得到“I”的输出
我不知道出了什么问题。
最佳答案
喜欢FatalError注释的 sLine.replaceAll()
返回一个新的 String
。您需要重新分配 sLine 或将 replaceAll()
的结果传递到方法中。
执行此操作后,您会发现一个需要修复的新错误,但这只是一个差值!
关于java - 我的回文有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26240852/