1. 回文字符串判断(AlgoCasts)

2020-03-01  本文已影响0人  面向全麦面包编程

描述

这个题目说的是,给你一个字符串,你要判断它是否是回文字符串。字符串里只考虑字母和数字,其它的字符可以无视。另外,对于字母,可以忽略大小写。
例如:" caa c "就是回文字符串。

注意点

Tips

代码引用

/**
 * 判断是否是回文字符串
 */
public class isPalindrome {
    /**
     * 判断字符是否是数字或者字母
     *
     * @param c 字符
     */
    private static Boolean isAlphanumeric(char c) {
        return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= 0 && c <= 9));
    }

    /**
     * 判断两个字母忽略大小写后是否一致
     *
     * @param a 字母
     * @param b 字母
     */
    private static Boolean isEqualIgnoreCase(char a, char b) {
        if (a >= 'A' && a <= 'Z') a += 32;
        if (b >= 'A' && b <= 'Z') b += 32;
        return a == b;
    }

    /**
     * 判断是否是回文字符串
     * T:O(n^2)  S:O(1)
     *
     * @param s 字符串
     */
    public static boolean isPalindrome(String s) {
        //边角条件
        if (s == null || s.length() == 0) return true;
        int i = 0, j = s.length() - 1;
        for (; i < j; ++i, --j) {   //时刻牢记i<j条件,尤其是内部循环
            while (i < j && !isAlphanumeric(s.charAt(i))) i++;
            while (i < j && !isAlphanumeric(s.charAt(j))) j--;
            if (i < j && !isEqualIgnoreCase(s.charAt(i), s.charAt(j))) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(isPalindrome(" caa c "));
    }
}

上一篇 下一篇

猜你喜欢

热点阅读