题目:
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,这样大大提升了算法性能