在NodeJS中检查字符串是否包含英语单词

ghhaqwfi  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(193)

在NodeJS中创建一个函数,当字符串包含一个超过3个字母的英语单词时,该函数返回true的最佳方法是什么?
代码将被放置在lambda中,所以我正在寻找最有效的解决方案。到目前为止,我得到的最好的解决方案是使用dictionary-en并迭代源字符串上调用.includes(word)的每个单词,我想知道您是否可以想到更好的方法来实现这一点。
一些应该返回true的字符串示例:

  • y89nsdadhomea98qwoi
  • :_5678aSD.广告。
  • yfugdnuagybdas眼镜midwqihniwqnhi

一些应该返回false的字符串示例:

  • y89nsdadhasa98qwoi
  • :_5678aSD.b0TTle4ds。
  • 伊富格德努阿吉布达斯米德沃基赫尼乌格尼
jutyujz0

jutyujz01#

浏览字典(可能包含数十万个单词)并不是一个好主意。当字符串的长度在10-200个字符之间时,迭代源字符串中的每个字符可以得到更好的时间复杂度结果。如果你不关心空间复杂度,有一个更好的方法:
1.构建一个提前的特殊字典散列表,这需要花费O(m)m是你的字典单词的数量)。hashmap将类似于:

// As object is hashmap-like in javascript
dictionaryMap = {
   'hom': 'e',
   'cat': '',
   'bot': 'tle',
   'gla': ['ss', 'cier'], // contains 'glass' and 'glacier'
};

1.迭代源字符串中的每个字符并查找单词,这样,迭代时间为O(n),查找时间为O(1):

for (i=0; i<n.length; i++) {
   lookupStr := n[i] + n[i+1] + n[i+2]; // <-- I know it's dump, just a sample :)))
   if (dictionaryMap.hasOwnProperty(lookupStr) {
      console.log(lookupStr + dictionaryMap[lookupStr])
      return 'hell yeah';
   }
}

1.现在你知道源字符串很有可能包含一个大于3的英语单词,你可以应用动态编程,构建一个树,或者改变dictionaryMap,如果你想找到一个确切的单词,执行步骤2递归:

dictionaryMap = {
   'gla': 'ss|cier'
}
// Apply dynamic programming or memoization to find the longest common continuous subsequence...

// Change the map to be a tree-like structure
dictionaryMap = {
   'gla': {
      's': {'s': ''},
      'c': {'i': {'e': {'r': ''}}}
   }
// Continue doing Step 2... 
// Or build a tree yourself and search for the exact word

=>总计:O(m) + O(n) + O(1) = O(m)时间复杂度和O(m)O(m*longestWordCharacters)空间复杂度

quhf5bfb

quhf5bfb2#

嗯?这不是node.js的工作,而是JavaScript!
什么是node.js
https://en.wikipedia.org/wiki/Node.js
现在的问题是...
英语单词超过3个字母但有成千上万的人!
你有没有一个包含所有这些单词的文本文件,以便我们可以将它们加载到数组中进行操作?
不?好吧,同时这是我们最好的...

const Valid=['home','boTTle','glasses','GodKnows'];

var S='y89nsdadhomea98qwoi'.toLowerCase(), Ok=false;

for(var i=0; i<Valid.length; i++){

 if(S.includes(Valid[i].toLowerCase())){Ok=true; break;}

}

if(Ok){

 // yeah the string is ok, what now?

}

对不起,我阅读了你的文章后喝了几杯苏格兰威士忌和LMAO。:)

相关问题