递归回文测试不能包括特殊字符

时间:2013-06-18 21:50:15

标签: java palindrome alphanumeric

我写了一个递归方法来检查一个单词是否是回文。

但我现在也希望检查字符串中的任何特殊字符(*?!<所以如果字符串是ab.ba则不是回文。

这就是我所拥有的和isAlphanuemerical()在单步执行时似乎正常工作,但是如果我输入ab.ba它仍然会记录为回文

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

    // Check if String contains any alphanumeric characters
    if (isAlphanumeric(s))
        return false;


    if(s.charAt(0) == s.charAt(s.length()-1))
        return isPal(s.substring(1, s.length()-1));//if its not the case than string is not.
    return false;
}

我的isAlphaneumerical()方法

public static boolean isAlphanumeric(String str) {
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (!Character.isLetter(c) && !Character.isDigit(c))
            return false;
    }
    return true;
}

2 个答案:

答案 0 :(得分:3)

if (isAlphanumeric(s))
        return false;

应该是

if (!isAlphanumeric(s))
        return false;

此外,您无需每隔一段时间调用isAlphanumeric(s)。您可以调用一次,或者更改它以便它只检查第一个/最后一个字符。您正在检查之前已经检查过的内容。

public static boolean isPal(String s)
{
    if (!isAlphanumeric(s))
        return false;

    return _isPal(s);
}

private static boolean _isPal(String s)
{
    if (s.length() == 0 || s.length() == 1)
        return true;

    if (s.charAt(0) == s.charAt(s.length()-1))
        return _isPal(s.substring(1, s.length()-1));

    return false;
}

private static boolean isAlphanumeric(String str) 
{
    for (int i = 0; i < str.length(); i++) 
    {
        char c = str.charAt(i);

        if (!Character.isLetter(c) && !Character.isDigit(c))
            return false;
    }
    return true;
}

答案 1 :(得分:1)

您的代码完全按照您的要求执行操作。 isAlphanumeric方法工作正常。

但是,如果 是字母数字,那么isPal会返回false

如果您不想将非字母数字字符串作为回文,那么请颠倒您的逻辑:

if (!isAlphanumeric(s))
    return false;

这使用!运算符来否定布尔结果。