0

我想知道如何修改以下方法以在检查字符串是否为回文时忽略某个字母并将其作为通配符...

示例:“哇”,在这种情况下,该方法应返回 false 但

"pat" , 't' 可以是通配符(视为 ap),因此它返回 true

"job" ,同样 b 可以是通配符并被视为 aj,因此方法返回 true。

这是我到目前为止所拥有的,我有一个忽略特殊字符和空格的单独方法,因此不需要在这篇文章中考虑。

private static boolean checkPalindrome2(String word) {
    if(word.length() < 2) { 
        return true;  
    }
    char first  = word.charAt(0);
    char last   = word.charAt(word.length()-1);
    if(first != last) { 
        return false; 
    }
    else { 
        return checkPalindrome2(word.substring(1,word.length()-1));
    }
}

这是我的测试课,

public class testPalindromes {

    public static void main(String[] args) {
        //if (Palindromes.isPalindrome("a") == true) {
        //  System.out.println("true");
        //} else {
        //  System.out.println("false");
        //}

        // block above is the same as this
        // isPalindrome already returns true or false, 
        // and true and false can be printed as strings
        System.out.println(isPalindrome("a"));

        if (Palindromes.isPalindrome("cat") == true) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
        if (Palindromes.isPalindrome("w o    w") == true) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
        if (Palindromes.isPalindrome("   a  ") == true) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
        if (Palindromes.isPalindrome("mom!") == true) {
            System.out.println("true");

        if (Palindromes.isPalindrome2("cat")==true){
            System.out.print("true");
        } else {
            System.out.println("false");
            }

        }

    }

}

isPalindrome2 是调用上述 checkPalindrome2 方法的方法,我的测试类中的最后一个案例(单词 cat)应该返回 true,因为 t 将是通配符(如上所述,通配符再次替换为 c 制作 cat,cac 是回文)

提前感谢所有帮助/输入!!!!ps,我特意实现了一个递归方法。

4

1 回答 1

2

只需在您的基本案例中添加额外的条件:

// both first and last have to NOT be the special character
// and first has to not equal last for this to return false
if(first != special && last != special && first != last)
    return false; 
else
    return checkPalindrome(word.substring(1,word.length()-1));
于 2013-04-01T02:11:41.840 回答