Проблема допустимой анаграммы - это проблема типа массива и хеширования. Здесь мы разберемся в вопросе и решим его.
Проблема:
Вот описание проблемы,
Имея две строки
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.