125. 验证回文串

双指针法

class Solution {
    public boolean isPalindrome(String s) {

        /**
         * 双指针遍历
         * 定义一个判断字符是否为字母的方法
         */
        int left = 0;
        int right = s.length() - 1;
        s = s.toLowerCase();

        while (left < right){

            if (! judge(s.charAt(left))){
                left++;
            }
            else if (! judge(s.charAt(right))){
                right--;
            }
            else {
                if (s.charAt(left) == s.charAt(right)){

                    left++;
                    right--;
                }
                else {
                    return false;
                }
            }
        }

        return true;
    }

    public boolean judge(char c){

        if (c - 'a' >= 0 && c - 'a' <= 25 || c - '0' >=0 && c - '0' <= 9){
            return true;
        }

        return false;
    }
}

/**
 * 时间复杂度 O(s)
 * 空间复杂度 O(1)
 */

优化1——使用字符类的判断方法

class Solution {
    public boolean isPalindrome(String s) {

        /**
         * 双指针遍历
         */
        int left = 0;
        int right = s.length() - 1;
        s = s.toLowerCase();

        while (left < right){

            if (! Character.isLetterOrDigit(s.charAt(left))){
                left++;
            }
            else if (! Character.isLetterOrDigit(s.charAt(right))){
                right--;
            }
            else {
                if (s.charAt(left) == s.charAt(right)){

                    left++;
                    right--;
                }
                else {
                    return false;
                }
            }
        }

        return true;
    }
}

/**
 * 时间复杂度 O(s)
 * 空间复杂度 O(1)
 */

https://leetcode-cn.com/problems/valid-palindrome/

posted @ 2021-11-24 10:17  振袖秋枫问红叶  阅读(24)  评论(0)    收藏  举报