迅速的
字谜是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用所有原始字母一次。
示例 1:
Input: s = "anagram", t = "nagaram" Output: true
分析问题
让我们来看看问题所在。我们必须知道我们正在分析的字符串的内容。我们还必须确保我们正在跟踪字母,因为它们应该完全相同以确认它是一个anagram 。
按照这样的思路,如果它们包含的字母有差异,我们可以提前返回。但是有相同的字母是什么意思呢?好吧,本质上它是为我们迭代的第一个单词映射出每个字母的频率。当我们遍历第二个单词时,我们可以仔细检查什么。
回顾第一个示例,我们可以通过计算每个字母来可视化这一点:
查看计数,我们可以在迭代第二个单词时使用它来验证。让我们看看这会是什么样子:
所以我们第一次在第二次迭代中遇到 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 上与我联系
在我的时事通讯中查看我的免费开发者路线图和每周科技行业新闻。
原文: https://dev.to/diballesteros/javascript-leetcode-valid-anagram-2001