首页 > 解决方案 > 优化 Nodejs 代码以在数组中查找字符串的字谜。解决方案不应该使用所有子集来查找字符串的字谜

问题描述

我想在数组中存储一对字谜。

输入将是数组。

例子:

let inputArray = ["abcd", "dbac", "adfs", "adsf", "bDca"];

它应该忽略字母的大小写。这里的“abcd 和 bDca”是字谜。

输出应该是一个包含一对字谜的数组。

Example: [
  'abcd is anagram of dbac',
  'adfs is anagram of adsf',
  'abcd is anagram of bDca'
]

标签: javascriptnode.js

解决方案


我最近解决了一个类似于 java 8 中的问题,我可以很容易地为你翻译成 javascript。

执行此操作的天真方法是遍历所有可能性,然后遍历数组以查看是否有任何匹配项。但是,这将非常缓慢。为了克服这个问题,我们可以创建一个“模式”并在我们沿着阵列移动时将其与其他模式匹配。

以下代码应该可以解决您的问题

function pattern(str){
   let map = new Map()
   let curcount = 0
   let pattern = ""
   for(var i = 0; i < str.length; i++){
       if(!map.get(str.charAt(i)+'')){
           pattern+=String.fromCharCode(curcount);
           map.put(str.charAt(i)+"",String.fromCharCode(curcount));
           curcount++;
       }
       else{
           pattern+=map.get(str.charAt(i)+"");
       }
   }
}

剩下的就很简单了,再做一个map(key是pattern,value是string的array)并记录一个pattern的每个实例,如果存在的话,pop这个词到数组中。你会被设置的:)


推荐阅读