【发布时间】:2011-04-30 02:07:20
【问题描述】:
我看过其他递归回文问题,也看过答案,但我的答案有点不同。它需要能够检查带有空格和标点符号的字符串并忽略它们(我知道,它们在技术上不是回文),因此诸如“女士,我是亚当”之类的字符串应该返回 true,但我的程序不是。这是我所拥有的:
public static boolean isPalindrom(String s){
System.out.println(s);
if (!Character.isLetter(s.charAt(0))){
isPalindrom(s.substring(1,s.length()));
}
if (!Character.isLetter(s.charAt(s.length()-1))){
isPalindrom(s.substring(0,s.length()-1));
}
if (s.length() == 1){
return true;
}
if (s.length() == 2){
if (s.substring(0,1).equalsIgnoreCase(s.substring(s.length()-1))){
return true;
}
else
return false;
}
if (!(s.substring(0,1).equalsIgnoreCase(s.substring(s.length()-1)))){
return false;
}
return isPalindrom(s.substring(1,s.length()-1));
}
问题在于,一旦开始展开递归,包含空格和标点符号的字符串就会开始返回 false。我不知道该怎么办。大约一个小时以来,我一直在尝试不同的解决方案。
附言我试图不使用正则表达式来删除空格和标点符号等。
【问题讨论】:
-
当您可以从两侧(从末端到中心)浏览字符串的边界时,为什么要使用递归(这不是高性能)?
标签: java