0

単語が回文かどうかを確認する再帰的な方法を作成しました。

しかし、文字列内の特殊文字 (*?!<) もチェックしたいので、文字列が 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;
}
4

2 に答える 2

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;
}
于 2013-06-18T21:58:16.100 に答える
1

あなたのコードは、あなたが指示したことを正確に実行しています。isAlphanumericメソッドは正常に機能します。

ただし、英数字の場合isPal返されます。false

英数字以外の文字列を回文にしたくない場合は、ロジックを逆にします。

if (!isAlphanumeric(s))
    return false;

これは!、ブール値の結果を否定するために演算子を使用します。

于 2013-06-18T21:58:03.707 に答える