美文网首页刷爆力扣
【29】验证回文串

【29】验证回文串

作者: 公孙剑人 | 来源:发表于2021-05-18 21:51 被阅读0次

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-palindrome/

    题目

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

    说明:本题中,我们将空字符串定义为有效的回文串。

    示例 1:
    输入: "A man, a plan, a canal: Panama"
    输出: true

    示例 2:
    输入: "race a car"
    输出: false

    思路

    1. 使用左右指针,挨个比较;
    2. 边界条件为左右指针重合,则为回文串,返回true即可,否则指针不会重合

    代码

        public boolean isPalindrome(String s) {
            if (s == null) {
                return true;
            }
            int right = s.length() - 1;
            int left = 0;
            // 判断左右指针是否重合
            while (left < right) {
                char leftChar = Character.toLowerCase(s.charAt(left));
                // 判断左边字符,不是数字or字符,则往前走一步
                if (!isCharType(leftChar)) {
                    left ++;
                    continue;
                }
                char rightChar = Character.toLowerCase(s.charAt(right));
                // 判断右边字符,不是数字or字符,则往后退一步
                if (!isCharType(rightChar)) {
                    right --;
                    continue;
                }
                // 若相等,移动指针继续判断
                if (leftChar == rightChar) {
                    left ++;
                    right --;
                } else {
                    return false;
                }
            }
            return true;
        }
    
        /**
         * 判断是否数字or字符
         * @param c
         * @return
         */
        private boolean isCharType(char c) {
            return c >= 'a' && c <= 'z'
                    || c <= 'A' && c >= 'Z'
                    || c >= '0' && c <= '9';
        }
    

    结果

    执行结果

    相关文章

      网友评论

        本文标题:【29】验证回文串

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