一、知识点
(图片来源datawhale)
二、例题
1.存在重复元素
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
dict={}
for i in nums:
if i in dict:
return True
else:
dict[i]=i
return False
2.有效的数独
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
row_map=[{} for _ in range(9)]
col_map=[{} for _ in range(9)]
boxes_map=[{} for _ in range(9)]
for i in range(9):
for j in range(9):
if board[i][j]=='.':
continue
num=int(board[i][j])
box_index=(i//3)*3+j//3
row_num=row_map[i].get(num,0)
col_num=col_map[j].get(num,0)
box_num=boxes_map[box_index].get(num,0)
if row_num or col_num or box_num:
return False
row_map[i][num]=1
col_map[j][num]=1
boxes_map[box_index][num]=1
return True
3.存在重复元素 II
class Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
d={}
for i,j in enumerate(nums):
if j in d:
d[j].append(i)
for x in d[j][:-1]:
if abs(d[j][-1]-x)<=k:
return True
else:
d[j]=[i]
return False
4.宝石与石头
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
dictt={}
for c in jewels:
dictt[c]=c
count=0
for c in stones:
if dictt.get(c,0):
count+=1
return count
5.子域名访问计数
class Solution:
def subdomainVisits(self, cpdomains: List[str]) -> List[str]:
dictt={}
for i in cpdomains:
num_words=str.split(i," ")
num=int(num_words[0])
words=str.split(num_words[-1],".")
root=words[-1]
for index_1 in range(len(words)-2,-1,-1):
words[index_1]=words[index_1]+"."+root
root=words[index_1]
for k in words:
add=dictt.get(k,0)
if add:
dictt[k]=add+num
else:
dictt[k]=num
res=[]
for key in dictt:
res.append(str(dictt[key])+" "+key)
return res