2020-5-6 leetcode刷题


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):			# 以l,r下标的字母为中心的最长回文串

	while l >= 0 and r < len(s) and s[l] == s[r]:	# 下标未溢出且左边等于右边
		l -= 1
		r += 1
		
	return s[l+1:r]		# l+1是因为经过上面的循环后l和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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值