有效回文串

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

样例:

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

"race a car" 不是一个回文。


之前判断过一个链表十分是回文链表(详见:点击打开链接),字符串的判断比链表简单,因为可以从后往前回溯。

但是在这道题当中,空格,标点,以及其他非字母或数字的字符是不能算在内的,所以,我们考虑这样来设计:

还是两个指针,left和right,一个从左往右,一个从右往左遍历字符串,碰到非字母或数字的跳过,碰到字母或数字则进行比较。

代码如下:

class Solution:
    # @param {string} s A string
    # @return {boolean} Whether the string is a valid palindrome
    def isPalindrome(self, s):
        left, right = 0, len(s) - 1
        while left < right:
            # 查找左边的是字母或数字的位置
            while left < right and not s[left].isalnum():
                left += 1
            # 查找右边的是字母或数字的位置
            while left < right and not s[right].isalnum():
                right -= 1
            # 若它们的小写形式不等,返回False
            if s[left].lower() != s[right].lower():
                return False
            left += 1
            right -= 1
        return True
        # Write your code here


你可能感兴趣的:(字符串)