每天刷两道题——第六天

1.1字母异位词分组

给你一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词指的是由重新排列源单词的所有字母得到的一个新单词。

输入: 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))

1.2最长连续数列

给定一个未排序的整数数组 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))

你可能感兴趣的:(每日刷题挑战,python)