有效回文串

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

样例:

"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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值