递归回文检查器

时间:2016-04-07 23:06:06

标签: java recursion

此方法仅适用于xox等小输入,但不适用于像taco cat这样的更复杂的输入。我已反复阅读此代码,但无法解决问题。我假设有一个小错误,因为我在结构上改变了代码,试图调整我的方法并且无法修复它。

import java.util.Scanner;

public class Palindromes
{
    static Scanner scan = new Scanner(System.in);

    public static void main (String[] args)
    {
    System.out.println("Enter a string, human:");
    String s=scan.nextLine();

    if(palindrome(s)){
        System.out.print("This is a palindrome, I am amused Earthling.");
    }else{
        System.out.print("Don't you know to speak only in palindromes to your alien Overlord?");
    }
}

public static boolean palindrome(String s){
    s.replace(" ","");

    if(s.length()<2){
        return true;
    }else if(s.charAt(0)==s.charAt(s.length()-1)){
        return palindrome(s.substring(1,s.length()-2));
    }else{
        return false;
    }
}

}

1 个答案:

答案 0 :(得分:3)

要解决两件事:

  1. 您忘记将replace的结果分配回s,导致您忽略删除空格的结果。尝试:

    s = s.replace(" ","");
    
  2. 在将子字符串传递给递归调用时,您有一个一个错误的错误。 ending index of substring is exclusive,所以你在子字符串的末尾修剪了太多字符。尝试:

    return palindrome(s.substring(1,s.length()-1));