2020-5-5 leetcode刷题

205.Isomorphic Strings

题目

题解

  • 创建一个字典,以s为基准,遍历s中的每个字母,如果是第一次发现则记录到字典中,字典的key是s对应的字母,字典的value是t对应的字母,不是第一次发现(字典里存在这个字母)则在字典中查到这个字母的value值,与现在的t的字母进行比较,不相等返回false。
  • 注意以s为基准和以t为基准去创建字典是不一样的,如例2用t为基准会返回false,所以需要判断以s和t为基准两个结果。
def isIsomaarphic(self,s,t):
	if len(s) != len(t):
		return False
	return self.halfIsom(s,t) and self.halfIsom(t,s)
	
def halfIsom(self,s,t):
	lookup = {}
	for i in range(len(s)):					# 遍历s中的字母
		if s[i] not in lookup:					# 若没有则加入字典 
			lookup[s[i]] = t[i]					# 字典的值为t对应位置的字母
		elif lookup[s[i]] != t[i]:				# 字典有,且字典中的值不等于当前t[i]的值
			return True
	return True


206.Reverse Linked List

题目

题解

  • 反转链表。创建一个结点prev,prev.next指向head.head.next指向prev.next(prev.next更改前的指向)。通俗地理解是每次总是在头结点prev后面插入结点(prev.next=head),插入的结点的next(head.next)指向还未插入前prev链表中的prev.next(已经占了别人第二的位置,别人在你后面了),即head.next = prev.next。完成插入,head指针指向下一个结点。
def reverseList(self,head):
	prev = ListNode(float('-inf'))
	while head:
		prev.next, head.next, head = head, prev.next, head.next  # 第一个和第二个置换必须同步进行
	return prev.next

217.Contains Duplicates

题目

题解

  • 第一种方法:利用字典dict。判断这个数是否在字典中,若没有则加入到字典,若有则返回true。
  • 第二种方法:先对链表排序sort(),如果当前值等于后一位的值返回true(nums[i]==nums[i+1])。只写第二种方法的代码:
def containDuplicate(self, nums):
	nums.sort()
	for i in range(len(nums)-1):
		if nums[i] == nums[i+1]:
			return True
	return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值