125. 验证回文串

题目-简单难度

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

示例

示例 1:

输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。

示例 2:

输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。

示例 3:

输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。

提示:

  • 1 <= s.length <= 2 * 105
  • s 仅由可打印的 ASCII 字符组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1. python自带库re删除标点符号后双指针

执行用时:24 ms, 在所有 Python 提交中击败了97.58%的用户
内存消耗:15.5 MB, 在所有 Python 提交中击败了27.37%的用户
通过测试用例:485 / 485

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        # 将标点符号去除,然后空格去除,再变为小写
        s = lower(re.sub(r"[%s]+" %punctuation, "",s).replace(" ",""))
        l,r = 0,len(s)-1
        while l<=r:
            if s[l]==s[r]:
                l+=1
                r-=1
            else:
                return False
        return True

2. 正则

执行用时:28 ms, 在所有 Python 提交中击败了92.84%的用户
内存消耗:15.4 MB, 在所有 Python 提交中击败了35.10%的用户
通过测试用例:485 / 485

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        # 正则将非符号内容留下,再变为小写
        s=re.sub('[^a-zA-Z0-9]','',s).lower()
        # 所有回文串的共性就是,只要它等于它的倒序,那就是回文串
        return s==s[::-1]

3. 用forloop遍历一半

执行用时:408 ms, 在所有 Python 提交中击败了7.85%的用户
内存消耗:15 MB, 在所有 Python 提交中击败了48.27%的用户
通过测试用例:485 / 485

class Solution(object):

    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = s.lower()
        s1 = ""
        for n in s:
            if n.isalpha() or n.isdigit():
                s1 += n
        # print(s1)
        for i in range(len(s1)/2):
            if (s1[i] != s1[len(s1)-i-1]):
                return False
        return True

4. 用isalpha和isdigit判断字符和数字,以此排除标点符号

执行用时:380 ms, 在所有 Python 提交中击败了12.12%的用户
内存消耗:14.6 MB, 在所有 Python 提交中击败了64.43%的用户
通过测试用例:485 / 485

class Solution(object):

    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        # 先将字符串小写化
        s = s.lower()
        # 创建列表
        s1 = ""
        for n in s:
            if n.isalpha() or n.isdigit():
                s1+=n
        return s1 == s1[::-1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值