给你一个字符串数组,将字母异位词
组合在一起。可以按任意顺序返回结果列表。字母异位词
指的是由重新排列源单词的所有字母得到的一个新单词。
输入
: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出
: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
互为字母异位词的两个字符串进行排序之后得到的字符串一定是相同的
代码
import collections
class question:
def groupAnagrams(self,strs):
mp=collections.defaultdict(list) #{key:[v1,v2,v3]}
for st in strs:
key="".join(sorted(st))
mp[key].append(st)
return list(mp.values())
q=question()
strs=["eat", "tea", "tan", "ate", "nat", "bat"]
print(q.groupAnagrams(strs))
给定一个未排序的整数数组 n u m s nums nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。算法的时间复杂度为 O(n) 。
输入
:nums = [100,4,200,1,3,2]
输出
:4
解释
:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
代码
class question:
def longestConsecutive(self,nums):
longest_streak=0
nums_set=set(nums) #去除重复的元素
for num in nums_set:
if num-1 not in nums_set: #从第一个最小的开始
curent_num=num
curent_streak=1
while curent_num+1 in nums_set:
curent_num+=1
curent_streak+=1
longest_streak=max(longest_streak,curent_streak)
return longest_streak
q=question()
nums = [100,4,200,1,3,2]
print(q.longestConsecutive(nums))