Skip to content

Hashing

Table of Contents

760. Find Anagram Mappings

760. Find Anagram Mappings - Python Solution
from typing import List


def anagramMappings(nums1: List[int], nums2: List[int]) -> List[int]:
    hashmap = {val: idx for idx, val in enumerate(nums2)}

    return [hashmap[num] for num in nums1]


if __name__ == "__main__":
    nums1 = [12, 28, 46, 32, 50]
    nums2 = [50, 12, 32, 46, 28]
    print(anagramMappings(nums1, nums2))  # [1, 4, 3, 2, 0]
    nums1 = [1, 2, 3]
    nums2 = [3, 2, 1]
    print(anagramMappings(nums1, nums2))  # [2, 1, 0]

266. Palindrome Permutation

266. Palindrome Permutation - Python Solution
from collections import defaultdict


# Hash
def canPermutePalindromeDict(s: str) -> bool:
    if len(s) == 1:
        return True

    count = defaultdict(int)

    for ch in s:
        if count[ch] == 1:
            count[ch] = 0
            continue
        count[ch] = 1

    return sum(count.values()) <= 1


# Set
def canPermutePalindromeSet(s: str) -> bool:
    if len(s) == 1:
        return True

    seen = set()

    for ch in s:
        if ch in seen:
            seen.remove(ch)
        else:
            seen.add(ch)

    return len(seen) <= 1


assert canPermutePalindromeDict("carerac") is True
assert canPermutePalindromeSet("carerac") is True

734. Sentence Similarity

734. Sentence Similarity - Python Solution
# Hash Set
def areSentencesSimilar(sentence1, sentence2, similarPairs):
    if len(sentence1) != len(sentence2):
        return False

    sim = set(map(tuple, similarPairs))

    for i in range(len(sentence1)):
        s1, s2 = sentence1[i], sentence2[i]
        if s1 == s2 or (s1, s2) in sim or (s2, s1) in sim:
            continue
        return False

    return True


if __name__ == "__main__":
    sentence1 = ["great", "acting", "skills"]
    sentence2 = ["fine", "drama", "talent"]
    similarPairs = [
        ["great", "fine"],
        ["drama", "acting"],
        ["skills", "talent"],
    ]
    print(areSentencesSimilar(sentence1, sentence2, similarPairs))  # True

1165. Single-Row Keyboard

1165. Single-Row Keyboard - Python Solution
def calculateTime(keyboard: str, word: str) -> int:
    pos = {char: i for i, char in enumerate(keyboard)}
    cur = 0
    res = 0

    for ch in word:
        target = pos[ch]
        res += abs(target - cur)
        cur = target

    return res


if __name__ == "__main__":
    keyboard = "pqrstuvwxyzabcdefghijklmno"
    word = "leetcode"
    print(calculateTime(keyboard, word))  # 73

249. Group Shifted Strings

1133. Largest Unique Number

1426. Counting Elements

1198. Find Smallest Common Element in All Rows

Comments