Leet Code OJ 125. Valid Palindrome [Difficulty: Easy]-python

题目描述:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

Note: For the purpose of this problem, we define empty string as valid palindrome.

Example 1:

Input: “A man, a plan, a canal: Panama”
Output: true
Example 2:

Input: “race a car”
Output: false

判断回文串,除了字母和数字之外的字符都忽略掉。算法思想比较简单,不要忽略空字符和大小写情况。我一共用了三种方法来写,思想一样,实现略有不同。将后半部分反转之后和前半部进行比较的方法处理速度更快一些。


方法1:替换函数处理,O(n)比对,速度快
使用upper进行大小写处理
使用正则表达式和sub()函数对串的内容进行处理

class Solution:
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        import re
        #result = False
        temp = re.sub(r'[^a-zA-Z0-9]','',s)
        #print(1,temp)
        length = len(temp)
        if length <= 1:
            return True
        start = 0
        end = length-1
        while(start <= end):
            temp1 = temp[start]
            temp2 = temp[end]
            if temp1.upper()!= temp2.upper():
                return False
            start += 1
            end -= 1
        return True

这里写图片描述
如果避免了多余的大小写转化之后,速度快了一丢丢,这段处理改为:

            if temp1.isupper():
                temp1=temp1.lower()
            if temp2.isupper():
                temp2=temp2.lower()
            if temp1 != temp2:
                return False

这里写图片描述

方法2:常规判断,一次对比,速度慢
isnumeric() isalpha() 函数运用
这里写图片描述

方法3:后半部分反转和前部分比较
str类型转换为list,再reverse()

class Solution:
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        import re
        #result = False
        temp = re.sub(r'[^a-zA-Z0-9]','',s)
        length = len(temp)

        if length <= 1:
            return True

        temp=temp.lower()

        #print(temp)

        length = len(temp)
        if length <= 1:
            return True

        n = length//2
        m = length%2
        #print(length,n,m)
        r=list(temp[n+m:])
        r.reverse()
        p= list(temp[0:n])

        return  r == p


这里写图片描述


很简单的题,用了三种方法来写,比较了速度。新学习了几个字符串操作的函数。isnumeric isalpha list(str).reverse isupper islower upper lower

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值