125. Valid Palindrome

    /*
     * 125. Valid Palindrome 
     * 2016-5-21 by Mingyang 
     * 注意alphanumeric不仅仅是指数字还指字母哦,居然还有符号!!
     * 这个题目最阴险的地方就是符号也加入了进去,比如一个case是"a."
     * 那么这个就不行,因为我们现在是没有考虑符号,所以必须加入符号进去
     * 关键1.如何变为大写
     * 关键2.如何判断是否为符号
     * 关键3.两个指针里面的while循环,low++以后一定要记得continue,因为有可能出界
     */
    public boolean isPalindrome(String s) {
        if (s == null || s.length() == 0)
            return true;
        s = s.trim();
        char[] num = s.toCharArray();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < num.length; i++) {
            char a = s.charAt(i);
            if (a >= 'a' && a <= 'z' || (a >= 'A' && a <= 'Z'))
                sb.append(Character.toLowerCase(a));
            if ((a >= '0' && a <= '9'))
                sb.append(a);
        }
        String comp = sb.toString();
        String res = sb.reverse().toString();
        if (res.equals(comp))
            return true;
        else
            return false;
    }
    // 下面给出两个指针的解法:
    public static boolean isPalindrome2(String s) {
        if (s.length() == 0)
            return true;
        s = s.toUpperCase();// 放心,并不会把数字也转了的
        int low1 = 'A', high1 = 'Z';
        int low2 = '0', high2 = '9';
        int low = 0, high = s.length() - 1;
        while (low < high) {
            if ((s.charAt(low) < low1 || s.charAt(low) > high1)
                    && (s.charAt(low) < low2 || s.charAt(low) > high2)) {
                low++;
                continue;
            }
            if ((s.charAt(high) < low1 || s.charAt(high) > high1)
                    && (s.charAt(high) < low2 || s.charAt(high) > high2)) {
                high--;
                continue;
            }
            if (s.charAt(low) == s.charAt(high)) {
                low++;
                high--;
            } else
                return false;
        }
        return true;
    }
原文地址:https://www.cnblogs.com/zmyvszk/p/5516087.html