title: 2020-5-6leetcode刷题 tags: renderNumberedHeading: true grammar_cjkRuby: true
5.Longest Palindromic Substring
题目
题解
最长回文子串。思路是遍历每个字母,然后以他为中心向两边扩展,找到最长的子串。 需要注意的是回文串有两种形状。例1的‘CBABC’,中心对称形状。是以A为中心,判断两边的字母是否相等。例2的‘ABCCBA’,轴对称形状,需要以CC为中心,向两边拓展。 创建一个空字符串palindromic,遍历每个字母,找到中心对称的回文串(以自己为中心),和轴对称的回文串(以自己和下一位为中心),比palindromic更长则更新palindromic.
def longestPalindromi c( self, s) :
palindromic = ''
for i in range ( len ( s) ) :
len1 = len ( self. getlongestpalind( s, i, i) )
if len1 > len ( palindromic) :
palindromic = self. getlongsetpalind( s, i, i) )
len2 = len ( self. getlongestpalind( s, i, i) )
if len2 > len ( palindromic) :
palindromic = self. getlongsetpalind( s, i, i+ 1 ) )
def getlongestpalind ( self, s, l, r) :
while l >= 0 and r < len ( s) and s[ l] == s[ r] :
l -= 1
r += 1
return s[ l+ 1 : r]
219.Contains Duplicate II
题目
题解
这道题的意思是列表中重复的值的距离不超过k,则返回true,超过k返回false。 建立一个字典dict,遍历每个索引和值(用enumerate),判断字典是否有这个值,第一次出现则存进字典中,如果字典有值那么要比较字典中的value值与当前值索引的差是否超过k。
def ContainsNearbyDuplicate ( self, nums, k) :
dict = { }
for i, num in enumerate ( nums) :
if num not in dict :
dict [ num] = i
else :
if i - dict [ num] <= k:
reuturn True
dict [ num] = i
return False
226.Invert Binary Tree
题目
题解
这道题的意思是对称翻转二叉树,可以看例子所示。要用到递归的思想。对于每颗子树(假设只有左父右结点),需要将左右结点对调。 递归的思想是先从上到下,一直到叶子结点(不做任何处理),再从下到上。例如上面的二叉树,递归到1,3,是叶子结点,返回到2,2不是叶子结点,左右结点对调(1,3对调),同理7(6,9对调),再返回到根结点4,2和7对应的左右子树对调。
def invertTree ( self, root) :
if root is not None :
root. left, root. right = self. invertTree( root. right) , self. invertTree( root. left)
return root