[刷题班] LeetCode125. 验证回文串

题目描述

思路:左右指针

只考虑数字和字母
字母的话需要全部转化为小写
然后使用左右指针判断是否是回文串

方法一:

class Solution {
    public boolean isPalindrome(String s) {
        List<Character> list = new ArrayList<>();
        for (char c : s.toCharArray()) {
            if (c >= 'A' && c <= 'Z') {
                list.add((char)(c + 32));
            } else if (c >= 'a' && c <= 'z') {
                list.add(c);
            } else if (c >= '0' && c <= '9') {
                list.add(c);
            }       
        } 
        int size = list.size() - 1;
        // 左右指针
        for (int left = 0, right = size; left < right; left ++, right --) {
            if (list.get(left) != list.get(right)) {
                return false;
            }
        }
        return true;
    }
}

时间复杂度:O(n)、空间复杂度:O(n)

方法二:

class Solution {
    public boolean isPalindrome(String s) {
        int left = 0, right = s.length() - 1;
        while (left < right) {
            // 忽略left左边无效字符,在数字和字母字符停下
            while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
                left ++;
            }
            // 忽略right右边无效字符
            while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
                right --;
            }

            if (left < right) {
                if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
                    return false;
                }
                left ++;
                right --;
            }
        }
        return true;
    }
}

时间复杂度:O(n)、空间复杂度:O(1)

Character.isLetterOrDigit():判断是否是字母或者数字
Character.toLowerCase():转小写

Character.toLowerCase(char ch) 方法用于将指定的字符参数转换为小写。对于数字字符,它不会有任何影响,即数字字符保持不变。这是因为数字字符在小写和大写之间没有大小写之分。

posted @ 2024-01-14 16:10  Ac_c0mpany丶  阅读(2)  评论(0编辑  收藏  举报