zoukankan      html  css  js  c++  java
  • 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]
    

      

  • 相关阅读:
    Cycling Label
    设置Eclipse的类文件和xml文件代码自动补全
    搭建maven环境
    Android依赖管理与私服搭建
    Cname与A记录(Address)区别
    mysql5.6.34在默认配置文件修改字符集为utf8后重启mysql服务没效果
    PHP将HTML的内容保存成word文档
    常用 Git 命令清单
    广告中的AdNetwork、AdExchange、DSP、SSP、RTB和DMP是什么?
    PHP两个日期之间的所有日期
  • 原文地址:https://www.cnblogs.com/xqn2017/p/8006825.html
Copyright © 2011-2022 走看看