classSolution(object): defisAnagram( s, t): record=[0]*26 for i in s: record[ord(i)-ord('a')]+=1 for j in t: record[ord(j)-ord('a')]-=1 for k in record: if k!=0: returnFalse returnTrue
classSolution(object): defcanConstruct(ransomNote, magazine): record=[0]*26 for i in ransomNote: record[ord(i)-ord('a')]+=1 for j in magazine: record[ord(j)-ord('a')]-=1 for k in record: if k<0: returnFalse returnTrue
classSolution(object): defgroupAnagrams( strs): record={} for i in strs: record[i]=-1 for index,j inenumerate(strs): if record[j]==-1: record[j]=index for k inrange(index+1,len(strs)): flag=0 jilu = [0] * 26 for n in strs[index]: jilu[ord(n)-ord('a')]+=1 for m in strs[k]: jilu[ord(m)-ord('a')]-=1 for a in jilu: if a!=0: flag=1 break ifnot flag: record[strs[k]]=index result=[] for j in record: tmp=[] aaa=record[j] for k in record: if record[k]==aaa and record[k]!=-2: tmp.append(k) record[k]=-2 iflen(tmp)!=0: result.append(tmp) return result a=Solution print(a.groupAnagrams(["a"]))
438.找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
lists=list(s) listp=list(p) record=[0]*26 for j in p: record[ord(j)-ord('a')]+=1 for slow inrange(len(s)-lenp+1): flag=0 tmprecord=record[:] for i inrange(lenp): tmprecord[ord(lists[slow+i])-ord('a')]-=1 for k in tmprecord: if k!=0: flag=1 break if flag==0: result.append(slow) return result
classSolution(object): defintersection(nums1, nums2): dict1={} result=[] for i in nums1: dict1[i]=1 for j in nums2: if j in dict1.keys() and dict1[j]==1: result.append(j) dict1[j]=0 return result
classSolution(object): defintersect( nums1, nums2): dict1 = {} result = [] for i in nums1: if i in dict1.keys(): dict1[i]+=1 else: dict1[i] = 1 for j in nums2: if j in dict1.keys() and dict1[j] >= 1: result.append(j) dict1[j] -= 1 return result
classSolution(object): defisHappy( n): defcalcul(n): sum_=0 while n: sum_+=(n%10)**2 n=n//10 return sum_ record=set() whileTrue: n=calcul(n) if n==1: returnTrue if n in record: returnFalse else: record.add(n)
classSolution(object): deffourSumCount( nums1, nums2, nums3, nums4): record={} result=0 for i in nums1: for j in nums2: if i + j in record: record[i+j]+=1 else: record[i+j]=1 for m in nums3: for n in nums4: if -(n+m) in record.keys(): result+=record[-n-m] return result
15.三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
sum = nums[slow] + nums[left] + nums[right] ifsum<0: left+=1 continue elifsum>0: right-=1 continue else: record.append([nums[slow],nums[left],nums[right]]) while left != right and nums[left] == nums[left + 1]: left += 1 while left != right and nums[right] == nums[right - 1]: right -= 1 left+=1 right-=1 return record
classSolution: deffourSum(self, nums, target): nums.sort() n = len(nums) res = [] for i inrange(n): if i > 0and nums[i] == nums[i - 1]: continue# 对nums[i]去重 for k inrange(i + 1, n): if k > i + 1and nums[k] == nums[k - 1]: continue# 对nums[k]去重 p = k + 1 q = n - 1
while p < q: if nums[i] + nums[k] + nums[p] + nums[q] > target: q -= 1 elif nums[i] + nums[k] + nums[p] + nums[q] < target: p += 1 else: res.append([nums[i], nums[k], nums[p], nums[q]]) # 对nums[p]和nums[q]去重 while p < q and nums[p] == nums[p + 1]: p += 1 while p < q and nums[q] == nums[q - 1]: q -= 1 p += 1 q -= 1 return res