Проблема допустимой анаграммы - это проблема типа массива и хеширования. Здесь мы разберемся в вопросе и решим его.

Проблема:

Вот описание проблемы,

Имея две строки s и t, вернуть true если t является анаграммой s, и false в противном случае.

Анаграмма – это слово или фраза, образованная путем перестановки букв другого слова или фразы, обычно с использованием всех исходных букв ровно один раз.

Пример:

Input: s = "anagram", t = "nagaram"
Output: true
Input: s = "rat", t = "car"
Output: false

Решение:

В качестве основного процесса, если мы хотим проверить, какому процессу мы будем следовать?

Во-первых, мы проверим, имеют ли оба одинаковое количество символов.

Input: s = "anagram", t = "nagaram"
s = 7 and t = 7

затем мы проверим количество повторяющихся символов, как мой раз.

s = "anagram" >> a = 3, n = 1, g = 1, r =1, m = 1
t = "nagaram" >> n = 1, a = 3, g = 1, r = 1, m = 1

Если оба значения совпадают, мы можем установить True, что означает анаграмму. В противном случае мы можем сказать False.

Теперь реализуйте эту логику в коде:

def isAnagram(s: str, t: str) -> bool:
    if len(s) != len(t):
        return False ## check both length is equal or not
    countS, countT = {}, {} 
    for i in range(len(s)): ## count character
       countS[s[i]] = 1 + countS.get(s[i], 0)
       countT[t[i]] = 1 + countT.get(t[i], 0)
    for c in countS:  ## check both have same numbers of characters
        if countS[c] != countT.get(c, 0):
               return False
    return True

давайте посмотрим лучший способ, который имеет больше времени и эффективности пространства.

def isAnagram(s: str, t: str) -> bool:
    hash = defaultdict(int)
    for c in s:
        hash[c] += 1
    for c in t:
        
        hash[c] -= 1
    for c, v in hash.items():
        if v != 0:
            return False
    return True

Надеюсь, эти два простых решения помогли вам понять проблему.

Оставайтесь на связи, чтобы получить больше решений с советами по интервью для FANNG.