125. Valid Palindrome

原文题目:
125. Valid Palindrome
读题:

该题目就是给定一组字符串,然后只检查字符串中的字母和数字,并且忽略字母的大小写,然后判断是否为回文

思路:

解法一:循环遍历字符串,将非字母非数字的字符用''直接替换掉得到纯字母数字字符串,然后忽略大小写lower()或者upper()判断是否为回文

该解法时间复杂度不符合leetcode的要求,运行时间超时

解法二:给定两个指针,指针1从前往后遍历,指针2从后往前遍历,碰到非字母非数字字符则跳过,然后依次比较,如果有不等的则不是回文,该解法已经提交AC了

'''解法一'''
class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if not s:
            return True
        for char in s:
            if not char.isalpha() and not char.isdigit(): #非数字非字母
                s = s.replace(char,'')   #替换
        res = s.upper() #转为大写字母
        result = True if res == res[::-1] else False #res[::-1]就是将res翻转
        return result

'''解法二'''
class Solution(object):
    def istarget(self, char):
        if char.isdigit() or char.isalpha():
            return True
        return False
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if not s:
            return True
        length = len(s)
        i = 0
        j = length -1
        while i < j:
            if self.istarget(s[i]) and self.istarget(s[j]): #同时为数字或者字母
                if s[i].lower() != s[j].lower():
                    return False
                i += 1
                j -= 1
            elif self.istarget(s[i]) and not self.istarget(s[j]): #后指针非数字非字母跳过
                j -= 1
            elif not self.istarget(s[i]) and self.istarget(s[j]): #前指针非数字非字母跳过
                i += 1
            else:  #同时为非数字非字母
                i += 1
                j -= 1
        return True

'''解法三'''
class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        cleanlist = [c for c in s.lower() if c.isalnum()]
        return cleanlist == cleanlist[::-1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值