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
  • 相关阅读:
    JDBC_批量处理语句提高处理速度
    JDBC_获取插入记录的主键值
    JDBC_获取数据库连接
    SmartSprites 智能批量合并 CSS 雪碧图
    移动前端开发技巧摘录
    将已有项目提交到github/从github上pull到本地
    网页设计创新式布局与交互
    如何打好前端游击战
    jQuery Mobile十大常用技巧
    Javascript图片的懒加载与预加载
  • 原文地址:https://www.cnblogs.com/Sunbreaker/p/13163578.html
Copyright © 2011-2022 走看看