125.题目描述:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。

解析:

1.用正则表达式去掉非数字和字母(JavaScript需要)
2.如果字符串长度小于2,返回true
3.定义两个指针left和right,一个在字符串开头,一个在字符串结尾
4.建立一个while循环,当left < right时执行循环
如果在任意地点s[left] !== s[right],则返回false
否则left++,right--,继续执行循环
5.当循环完成后都没有返回false,则返回true

Java:

public boolean isPalindrome(String s) {
        if(s.isEmpty()) {
            return true;
        }
        int left = 0;
        int right = s.length() - 1;
        while(left < right) {
            if(!Character.isLetterOrDigit(s.charAt(left))) {
                left++;
                continue;
            }
            if(!Character.isLetterOrDigit(s.charAt(right))) {
                right--;
                continue;
            }
            if(Character.toLowerCase(s.charAt(left)) !=
            Character.toLowerCase(s.charAt(right))) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

JavaScript:

var isPalindrome = function(s) {
    s = s.toLowerCase().replace(/[\W_]/g, "");
    if(s.length < 2) {
        return true;
    }
    let left = 0;
    let right = s.length - 1;
    while(left < right) {
        if(s[left] !== s[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
};

680.题目描述:

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

解析:

在上一题的基础上,多加了一个判断,left + 1是否等于right,right - 1是否等于left alt

Java:

public boolean validPalindrome(String s) {
        int left = 0, right = s.length() - 1;
        while(left < right) {
            if(s.charAt(left) != s.charAt(right)) {
                boolean result = isPalindrome(s, left + 1, right)
                || isPalindrome(s, left, right - 1);
                return result;
            }
            left++;
            right--;
        }
        return true;
    }
    public boolean isPalindrome(String s, int left, int right) {
        while(left < right) {
            if(s.charAt(left) != s.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

JavaScript:

var validPalindrome = function(s) {
    let left = 0, right = s.length - 1;
    while(left < right) {
        if(s[left] !== s[right]) {
            const result = isPalindrome(left + 1, right) || isPalindrome(left, right - 1);
            return result;
        }
        left++;
        right--;
    }
    return true;

    function isPalindrome(left, right) {
        while(left < right) {
            if(s[left] !== s[right]) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
};