zoukankan      html  css  js  c++  java
  • 每日leetcode-数组-125. 验证回文串

    分类:字符串-回文串的定义

    题目描述:

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

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

    回文串的定义:回文串就是指正反读一样的字符串。

    解题思路:

    1.把所有符合条件的字符写入一个列表,然后判断其逆序是否相等。

    class Solution:
        def isPalindrome(self, s: str) -> bool:
            all = []
            for i in s:
                if i.isalnum():
                    all.append(i.lower())
            b = list(reversed(all))
            return all == b

    注意: reverse函数  返回的是空值,所以不能用reverse

    class Solution:
        def isPalindrome(self, s: str) -> bool:
            all = []
            for i in s:
                if i.isalnum():
                    all.append(i.lower())
            return all == all[::-1]
    class Solution:
        def isPalindrome(self, s: str) -> bool:
            sgood = "".join(ch.lower() for ch in s if ch.isalnum())
            return sgood == sgood[::-1]
    
    #写入字符串

    复杂度分析

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

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

    解题思路2:用两个指针,往中间移动,依此判断是否相等

    class Solution:
        def isPalindrome(self, s: str) -> bool:
            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
                if left < right:
                    if s[left].upper() != s[right].upper():
                        return False
                    left += 1
                    right -= 1
            return True

    复杂度分析

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

    • 空间复杂度:O(1)

  • 相关阅读:
    PC端Vue后台管理系统request.js结合业务封装axios
    从零开始学 Web 之 Vue.js(五)Vue的动画
    css实现左右两个div等高
    css样式优先级计算规则
    jquery中attr和prop区别
    table文字溢出显示省略号问题
    2020-12-15
    2020-12-14
    2020-12-11
    2020-12-10
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14891198.html
Copyright © 2011-2022 走看看