python_day_12:20180813
125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
https://leetcode-cn.com/problems/valid-palindrome/description/
思路:
先把字符串中的数字和字母提取出来放到新列表中,然后从首位两个方向遍历比较元素,来判断是否是回文串
class Solution: def isPalindrome(self, s): """ :type s: str :rtype: bool """ strs=[] for letter in s: if letter.isalpha() or letter.isdigit(): strs.append(letter.lower()) if len(strs)>1: for j in range(int(len(strs)/2)+1): if strs[j]!=strs[-j-1]: return False return True
680. 验证回文字符串 Ⅱ
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
https://leetcode-cn.com/problems/valid-palindrome-ii/description/
思路:
题目要求最多删除一个字符,先进行双向遍历判断,找出相异位置,然后生成两个子串,分别是删掉前一个相异点和后一个相异点得到,最后用“或”条件来判断两个子串是否有回文字符串
class Solution: def validPalindrome(self, s): """ :type s: str :rtype: bool """ if len(s)<=2: return True s1="" s2="" for i in range(len(s)//2+1): if s[i] != s[-i-1]: s1=s[:i]+s[i+1:] if i >0: s2=s[:-i-1]+s[-i:] else: s2=s[:-1] break return s1==s1[::-1] or s2==s2[::-1]