classSolution(object):defcanConstruct(self, ransomNote, magazine):"""
:type ransomNote: str
:type magazine: str
:rtype: bool
"""
alphabet=[0]*26for i in magazine:
alphabet[ord(i)-ord('a')]+=1for j in ransomNote:
alphabet[ord(j)-ord('a')]-=1for k inrange(26):if alphabet[k]<0:returnFalsereturnTrue
使用count的方法
classSolution:defcanConstruct(self, ransomNote:str, magazine:str)->bool:for char in ransomNote:if char in magazine and ransomNote.count(char)<= magazine.count(char):continueelse:returnFalsereturnTrue
classSolution(object):deffourSum(self, nums, target):"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
result =[]
nums.sort()for a inrange(len(nums)):for b inrange(a+1,len(nums)):
tmp = target - nums[a]- nums[b]
c = b+1
d =len(nums)-1while c<d:if nums[c]+ nums[d]< tmp:
c +=1elif nums[c]+ nums[d]> tmp:
d -=1else:if[nums[a], nums[b], nums[c], nums[d]]notin result:
result.append([nums[a], nums[b], nums[c], nums[d]])
c+=1
d-=1return result
带去重的版本(剪枝条件太多了,简单了解了一下)
注意一下不可以直接a>target就return 因为后面的数可能小于0
classSolution(object):deffourSum(self, nums, target):"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
result =[]
nums.sort()for a inrange(len(nums)):if a>0and nums[a-1]==nums[a]:continuefor b inrange(a+1,len(nums)):if b>a+1and nums[b-1]==nums[b]:continue
tmp = target - nums[a]- nums[b]
c = b+1
d =len(nums)-1while c<d:if nums[c]+ nums[d]< tmp:
c +=1elif nums[c]+ nums[d]> tmp:
d -=1else:
result.append([nums[a], nums[b], nums[c], nums[d]])while c<d and nums[c]==nums[c+1]:
c +=1while c<d and nums[d]==nums[d-1]:
d -=1
c+=1
d-=1return result