415. 有效回文串

描述

给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。

注意事项

你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。在这个题目中,我们将空字符串判定为有效回文。

样例

"A man, a plan, a canal: Panama" 是一个回文。
"race a car" 不是一个回文。

挑战

O(n) 时间复杂度,且不占用额外空间。

思路

题目需要过滤掉除字母和数字外的字符,还要用Character.toLowerCase()进行大小写转换

代码

public class Solution {
    /*
     * @param s: A string
     * @return: Whether the string is a valid palindrome
     */
    public boolean isPalindrome(String s) {
        if (s == null || s.length() == 0) {
            return true;
        }
        
        int left = 0;
        int right = s.length() - 1;
        char[] string = s.toCharArray();
        while (left < right) {
            while (left < right && !isValue(string[left])) {
                left++;
            }
            while (left < right && !isValue(string[right])) {
                right--;
            }
            if (Character.toLowerCase(string[left]) != 
                Character.toLowerCase(string[right])) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
    
    private boolean isValue(char c) {
        return Character.isLetter(c) || Character.isDigit(c);
    }
}

你可能感兴趣的:(415. 有效回文串)