使用递归来检查字符串是否是回文?

时间:2017-02-11 23:47:09

标签: java string

我的代码有问题,因为我的任务中的测试用例出错了,当我在线提交代码时给出了运行时错误。该测试用例可以是任何String。我相信代码的一切都很好,因为我已经手动检查了许多测试用例。

这里是代码

public static boolean isStringPalindrome(String input) {
    if(input.length()==0 || input.length()==1)
        return true;

    int first = 0;
    int last = input.length()-1;

    if(input.charAt(first) != input.charAt(last))
        return false;

    String str="";
    for(int i=first+1;i<last;i++){
        str = str+input.charAt(i); 
    }
    boolean sa = isStringPalindrome(str);
    return sa; 
}

示例输入

racecar

输出

true   

示例输入

pablo

输出

false   

2 个答案:

答案 0 :(得分:3)

如果String是回文,则递归测试您的代码似乎过于复杂。像,

public static boolean isStringPalindrome(String input) {
    if (input == null) {
        return false;
    } else if (input.isEmpty() || input.length() == 1) {
        return true;
    }
    int len = input.length() - 1;
    return input.charAt(0) == input.charAt(len) //
            && isStringPalindrome(input.substring(1, len));
}

在没有嵌入for循环的情况下是递归的。因为如果你能做到这一点,你应该做一些像

这样的事情
public static boolean isStringPalindrome(String input) {
    if (input == null) {
        return false;
    } else if (input.isEmpty() || input.length() == 1) {
        return true;
    }
    int len = input.length();
    for (int i = 0; i <= len / 2; i++) {
        if (input.charAt(i) != input.charAt(len - 1 - i)) {
            return false;
        }
    }
    return true;
}

答案 1 :(得分:2)

检查回文的简单方法可以是:

public static boolean isPalindrome(String s)
{   if (input == null)
        return false;
    else if(s.length() == 0 || s.length() == 1)
        return true;

    /* check for first and last char of String:
     * if they are same then do the same thing for a substring
     * with first and last char removed. and carry on this
     * until you string completes or condition fails.
     */
    if(s.charAt(0) == s.charAt(s.length()-1))
        return isPalindrome(s.substring(1, s.length()-1));

    return false;
}

<强>更新

您将获得runtime error(NZEC),这意味着non-zero exit code。这意味着您的程序意外结束。除了你的程序没有null检查外,我没有看到任何理由。否则,我仔细检查了你的代码,你正在做我建议的同样的事情。