[leetcode: Python]125. Valid Palindrome

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

For example,
“A man, a plan, a canal: Panama” is a palindrome.
“race a car” is not a palindrome.

Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.
题意:
判断给定字符串是否是回文。
注意:
你是否考虑到字符串为空?
考虑到这个问题,我们定义空字符串为有效回文。

方法一:性能772ms(简直是暴力,可怕。。。)

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        su = s.upper()

        str1 = [] 




        for i in su:
            if (ord(i) >= ord('A') and ord(i) <= ord('Z')) or (ord(i) >= ord('0') and ord(i) <= ord('9')):
                str1.append(i)
        if len(str1) == 0 or len(str1) == 1:
            return True
        while len(str1) > 1:
            if str1[0] == str1[-1]:
                str1.pop(0)
                str1.pop()
                if len(str1) == 0 or len(str1) == 1:
                    return True
            elif str1[0] != str1[-1]:
                return False

方法二:性能52ms

import re
class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = " ".join(re.findall("[a-zA-Z0-9]+", s))
        s = s.replace(" ", "")
        if not s or len(s) == 1:
            return True
        if len(s) % 2 == 0:
            first = s[:len(s)/2]
            second = s[len(s)/2:]
        else:
            first = s[:len(s)/2]
            second = s[len(s)/2 + 1:]

        return first.lower()[::-1] == second.lower()

两个方法的最大区别在于,方法二调用了包re,这样大大提升了算法性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值