欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【LeetCode】 125. 验证回文串

程序员文章站 2022-07-13 08:43:12
...

题目

题目传送门:点击此处
【LeetCode】 125. 验证回文串

题解

思路

  1. 先不考虑字符的有效,如果只是判断是不是回文就很好判断,两个指针,一个指向头,一个指向尾,遍历到中间结束
  2. 现在有特殊字符,那么就要考虑一下坐标要怎么变的问题了,思路跟原来的一样,也是两个指针,一个头,一个尾,怎么变是需要思考的
  3. 在移动的时候,判断当前的字符是不是有效的
  4. 比对字符串的时候要考虑是数字还是字母,它们的比对方式不一样

代码

class Solution {
    public boolean isPalindrome(String s) {
        int i = 0;
        int j = s.length() - 1;
        while (i <= j) {
            char chari = s.charAt(i);
            char charj = s.charAt(j);
            if (!validChar(chari)) { // 判断索引为 i 的字符是不是有效字符
                i++;
            } else if (!validChar(charj)) { // 判断索引为 j 的字符是不是有效字符
                j--;
            } else { // 索引为 i 或者 j 的字符都是有效字符,就比较两个字符,然后再移动指针 i 和 j
                if (j < i) return false;
                if (!equalChar(chari, charj)) return false;
                i++;
                j--;
            }
        }
        return true;
    }

    private static boolean validChar(char c) {
        if ((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)) return true;
        return false;
    }

    private static boolean equalChar(char c1, char c2) {
        if ((c1 >= 48 && c1 <= 57) || (c2 >= 48 && c2 <= 57)) return c1 == c2 ? true : false;
        if (c1 == c2) return true;
        else if (c1 + 32 == c2) return true;
        else if (c1 == c2 + 32) return true;
        else return false;
    }
}