zoukankan      html  css  js  c++  java
  • leetcode125. 验证回文串 python 简单

    125. 验证回文串

    难度简单
     
     
    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

    说明:本题中,我们将空字符串定义为有效的回文串。

    示例 1:

    输入: "A man, a plan, a canal: Panama"
    输出: true
    

    示例 2:

    输入: "race a car"
    输出: false

    解法1:直接用双指针 硬性判断

    时间复杂度:O(|s|)O(∣s∣),其中 |s|∣s∣ 是字符串 ss 的长度。

    空间复杂度:O(|s|)O(∣s∣)。由于我们需要将所有的字母和数字字符存放在另一个字符串中,在最坏情况下,新的字符串 extit{sgood}sgood 与原字符串 ss 完全相同,因此需要使用 O(|s|)O(∣s∣) 的空间。

     暴力破解 

    class Solution:
        def isPalindrome(self, s: str) -> bool:
            contener = []
            for i in s :
                if 48 <= ord(i) <= 57 or 65 <= ord(i) <= 90 or 97 <= ord(i) <= 122:
                    contener.append(i.upper())
            left = 0
            right = -1
            if len(contener) ==1 :
                return True
    
            if len(contener)%2==1:
                while left <= len(contener)/2 - 1 :
                    if contener[left] != contener[right] :
                        return False
                    left += 1
                    right -= 1
                return True
            while left < len(contener) / 2 :
                    if contener[left] != contener[right]:
                        return False
                    left += 1
                    right -= 1
            return True
    

      

    解法二  :

      原地用双指针判断
    • 时间复杂度:O(|s|)O(s),其中 |s|s∣ 是字符串 ss 的长度。

    • 空间O(1)
    class Solution:
        def isPalindrome(self, s: str) -> bool:
            n = len(s)
            left, right = 0, n - 1
            
            while left < right:
                while left < right and not s[left].isalnum():
                    left += 1
                while left < right and not s[right].isalnum():
                    right -= 1
                if left < right:
                    if s[left].lower() != s[right].lower():
                        return False
                    left, right = left + 1, right - 1
    
            return True
  • 相关阅读:
    阅读<SQL语言艺术>实践五
    <SQL语言艺术>阅读计划
    文本类文件与VS关联实践
    接口开发原则
    逻辑部分开发原则
    <海量数据库解决方案>2011022301
    5800对于存储卡密码设置问题
    [转]Delphi用户登录窗口框架
    20世纪科学界最重要的12本书
    [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)
  • 原文地址:https://www.cnblogs.com/Sunbreaker/p/13163578.html
Copyright © 2011-2022 走看看