Javascript - 查找字谜的更好解决方案 - 时间复杂度 O (n log n)

标签 javascript time-complexity anagram

免责声明

大家好,我知道很少有 Javascript 问题/答案涉及弄清楚如何查找两个单词是否是字谜。

我不只是在寻找一个函数来判断两个单词/字符串是否是变位词。我正在寻找一种比下面提供的函数更快的函数。目前,我相信下面函数的时间复杂度是O (n log n)

我想找出一个时间复杂度为 O(n) 的函数,或者运行时间比提供的函数快的函数。

代码

const isAnagram = (str1, str2) => {

  str1 = str1.toLowerCase();
  str2 = str2.toLowerCase();


  if (str1.length !== str2.length) {
     return false
  }

  let sortStr1 = str1.split('').sort().join('').trim();
  let sortStr2 = str2.split('').sort().join('').trim();

  return sortStr1 === sortStr2
 };

console.log(isAnagram('dog', 'goD')); //true

最佳答案

您可以尝试基于计数的算法。

const isAnagram = (str1, str2) => {

  str1 = str1.toLowerCase();
  str2 = str2.toLowerCase();
  //and remove any char you think not important (like space) here
  
  if (str1.length !== str2.length) return false
  
  let counting = {}
  for(let c of str1) 
     if(counting[c]) ++counting[c]
     else counting[c] = 1
  
  for(let c of str2)
     if(counting[c]) --counting[c]
     else return false
  
  return true
};

console.log(isAnagram('dog', 'goD')); //true
console.log(isAnagram('eleven plus two', 'twelve plus one')); //true
console.log(isAnagram('dog', 'hot')); //false
console.log(isAnagram('banana', 'nana')); //false

关于Javascript - 查找字谜的更好解决方案 - 时间复杂度 O (n log n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55822530/

相关文章:

javascript - 为什么谷歌网站管理员工具看不到我网站的静态版本,而是动态版本的模板?

javascript - 将 map 外的标记拖到 html 元素

javascript - 如何将字段名称传递给 Mongoose 的 update() 方法?

c++ - 以 O(log(n)) 复杂度改变二叉堆元素的优先级

c# - 是否有已知的算法来查找 N 个元素中哪 K 个元素的总和最接近整数?

algorithm - 根据字符集对单词进行聚类

python - 如何在Python中区分大小写的同时测试两个字符串是否是字谜?

javascript - 如何获得 google recaptcha V3 响应

algorithm - 尝试自定义插入和删除功能

php - 正则表达式匹配必须包含字符串中的所有字符