【LeetCode】哈希表、字典、集合 实战题目 242 49 1

242 有效的字母异位词(亚马逊、Facebook、谷歌在半年内面试中考过)
注意切题四件套:

  1. clarification 和面试官搞清楚题目的要求,即题面是什么,比如在本题中需要搞清楚,
  • 什么是异位词:异位词是字母出现的次数一样,但是出现顺序不一样的词
  • 在本题中是否区分大小写?
  1. possible solutions—>optimal(time & space)
  2. code
  3. test cases
    这里一定要记得和面试官要几个测试样例,证明你做事是有始有终的

本题的方法有:

  1. 暴力法:先 sort 一下排个序再比较,时间复杂度是 O(nlogn)
  2. 哈希表的方法:map 来统计每个字符出现的频次,如果相同证明是异位词
# 方法1;暴力法
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return sorted(s) == sorted(t)
# 方法2:hashtable 的方法
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return collections. Counter(s) == collections.Counter(t)

49 字母异位词分组(亚马逊在半年内面试中常考)

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dic = {}
        for item in strs:
            key = tuple(sorted(item))
            dic[key] = dic.get(key,[]) + [item]
        return list(dic.values())

1 两数之和(亚马逊、字节跳动、谷歌、Facebook、苹果、微软、腾讯在半年内面试中常考)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dic = {}
        for i,num in enumerate(nums):
            if num in dic:
                return [dic[num],i]
            dic[target - num] = i 

你可能感兴趣的:(算法和数据结构刷题,哈希,字节跳动,哈希表,hashmap,腾讯)