JavaScript LeetCode Действительная анаграмма


Подсказка

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

Пример 1:

Input: s = "anagram", t = "nagaram" 
Output: true
Войти в полноэкранный режим Выход из полноэкранного режима

Анализ проблемы

Давайте разберемся, о чем идет речь в задаче. Мы должны знать содержимое строк, которые мы анализируем. Мы также должны убедиться, что следим за буквами, так как они должны быть абсолютно одинаковыми, чтобы подтвердить, что это анаграмма.

Следуя этому пути, мы можем заблаговременно вернуться, если в содержащихся в них буквах есть разница. Но что значит иметь одинаковые буквы? По сути, это определение частоты встречаемости каждой буквы для первого слова, над которым мы проводим итерации. Когда мы итерируем второе слово, мы можем перепроверить, что именно.

Возвращаясь к первому примеру, мы можем визуализировать это, подсчитывая каждую букву:

Глядя на подсчеты, мы можем использовать это для проверки на месте, когда мы итерируем второе слово. Давайте посмотрим, как это будет выглядеть:

Итак, когда мы в первый раз сталкиваемся с n во второй итерации, мы вычитаем его из числа. В любой момент, когда мы опускаемся ниже 0, мы знаем, что слова не являются анаграммами.

Круто 😎, давайте приступим к кодированию.

Решение

Как и в предыдущей задаче, мы можем использовать хэш-таблицу.

var isAnagram = function(s, t) {
    if (s.length != t.length) return false;
    const hashTable = {};

    for(let i = 0; i < s.length; i++) {
        if (!hashTable[s[i]]) {
          hashTable[s[i]] = 0;
        }
        hashTable[s[i]]++;
    }

    for(let j = 0; j< t.length; j++) {
        if (!hashTable[t[j]]){
          return false;  
        } 
        hashTable[s[j]]--; 
    }

    return true;
};
Войдите в полноэкранный режим Выход из полноэкранного режима

На первой итерации мы добавляем частоту каждой буквы. Если ее нет, мы создаем значение 0 в этой точке.

if (!hashTable[s[i]]) {
    hashTable[s[i]] = 0;
}
hashTable[s[i]]++;
Вход в полноэкранный режим Выход из полноэкранного режима

На второй итерации мы вычитаем все значения. Если ни одна буква не существует, то мы получим число 0, что означает, что мы вернем false.

if (!hashTable[t[j]]){
   return false;  
} 
hashTable[s[j]]--;
Вход в полноэкранный режим Выход из полноэкранного режима

Давайте подключимся

Если вам понравилось это, не стесняйтесь связаться со мной в LinkedIn или Twitter.

Получите мою бесплатную дорожную карту для разработчиков и еженедельные новости технологической индустрии в моей рассылке.

Оцените статью
Procodings.ru
Добавить комментарий