【29】验证回文串

来源:力扣(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】验证回文串)