题目是,给定一个字符,两种情况返回true
1.本身就是回文串(palindrome)
2.删除任意一个字符后,这个串成为回文串。
1.朴素方法:
轮着删字符,
time limit exceeded
class Solution:
def validPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
for i in range(len(s)):
t="".join([s[:i],s[i+1:]])
if t==t[::-1]: return True
return False
2.聪明方法
稍微懂点脑子,就知道,如果a是回文串,那么a[i]==a[len(a)-i-1],如果不相等,由题意只能删掉一个字符,那么要么是把i位置上的字符删掉后是回文串,要么把len(a)-i-1位置上的字符删掉后就是回文串。
那么思路就是,先判断它本身是不是回文串,然从头判别,i和len(s)-1-i,相等那么i就再往里走,可以缩小判别范围。
额,好像讲得不是很清楚。代码很简单…………
class Solution(object):
def validPalindrome(self, s):
if s==s[::-1]:return True
for i in range(len(s)-1):
if s[i] != s[len(s)-i-1]
return s[i+1:len(s)-i]==s[i+1:len(s)-i][::-1] or s[i:~i]==s[i:~i][::-1]
我就是熟悉一下Python的风格吧……