美文网首页
1. 回文字符串判断(AlgoCasts)

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

作者: 面向全麦面包编程 | 来源:发表于2020-03-01 21:13 被阅读0次

    描述

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

    注意点

    • 判断字符是否是字母和数字
    • 非Alphanumeric可忽略
    • 对于字母可以忽略大小写

    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 "));
        }
    }
    
    

    相关文章

      网友评论

          本文标题:1. 回文字符串判断(AlgoCasts)

          本文链接:https://www.haomeiwen.com/subject/sttlkhtx.html