【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;
    }
}
发布了151 篇原创文章 · 获赞 148 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq1515312832/article/details/104332824
今日推荐