回文を使って回文問題を解決しようとしました。私は、スレッド内の例外Main.isPalindromeでjava.lang.String.substringで "メイン" によってjava.lang.StackOverflowError (String.java:1969) (Main.java:160)palindrome StackOverflowエラー
しかし、Iドンを得ましたそれを修正する方法はわかりません。
public static boolean isPalindrome(String s) {
int len = s.length();
if (len <= 1) return true;
else {
char ch1 = Character.toLowerCase(s.charAt(0));
char ch2 = Character.toLowerCase(s.charAt(len - 1));
boolean check1 = Character.isLetter(ch1) || Character.isDigit(ch1);
boolean check2 = Character.isLetter(ch2) || Character.isDigit(ch2);
if (check1 && check2) {
if (ch1 == ch2) {
String shorter = s.substring(1, len - 1);
return isPalindrome(shorter);
}
else {
return false;
}
}
else if (!check1 && check2) {
String shorter = s.substring(1);
return isPalindrome(shorter);
}
else if (!check2 && check1) {
String shorter = s.substring(0, len - 1);
return isPalindrome(shorter);
}
else {
String shorter = s.substring(1, len - 1);
return isPalindrome(shorter);
}
}
}
ここでは、入力文字列が奇数長になると想定しています。開始ブロックでも長さが2であることを確認し、0番目と1番目の位置でチェックしてください。 –
System.out.printを試しました(isPalindrome( "sb、bbs")); System.out.print(isPalindrome( "、bbs")); System.out.print(isPalindrome( "sbbs")); – sower
しかし、それらのすべてが正しいです – sower