125. Valid Palindrome

Valid Palindrome

思路一:相向双指针

class Solution:
    def isPalindrome(self, s: str) -> bool:
        i, j = 0, len(s)-1
        while i < j:
            left = s[i].lower()
            if not (left.isalpha() or left.isdigit()):
                i += 1
                continue
            else:
                right = s[j].lower()
                if not (right.isalpha() or right.isdigit()):
                    j -= 1
                    continue
                else:
                    if left != right:
                        return False
                    else:
                        i += 1
                        j -= 1
        return True

思路二:粗暴点,去除无效字符后,全部小写,从中心切割,把右边逆序,再对比

class Solution:
    def isPalindrome(self, s: str) -> bool:
        valid = [x.lower() for x in s if (x.isalpha() or x.isdigit())]
        mid = len(valid)//2
        left = valid[:mid]
        right = valid[len(valid)-mid:]
        right.reverse()
        if left == right:
            return True
        else:
            return False

Last updated

Was this helpful?