将混杂数组与字符串匹配的函数

Posted

技术标签:

【中文标题】将混杂数组与字符串匹配的函数【英文标题】:Function for Matching Jumbled Array to string 【发布时间】:2017-10-21 14:08:20 【问题描述】:

有谁知道我如何将一堆乱七八糟的字母匹配到一个单词,例如,一些可以匹配的函数 一个数组,例如 ["a","c","a","e","c"]; 给一个单词“ace”并给我 1 或者如果不是像 indexOf 或 InArray 那样的 -1 但对于一个混乱的单词。 我用一个有据可查的例子做了一个 js fiddle

请注意,我会将字母数组与 30000 到 50000 个单词进行比较。

https://jsfiddle.net/AlexanderMitrakis/89dchpt8/1/

this.gameletters = []; //Array of Game letters. 
                //e.g. ["P", "E", "H", "E", "U", "I", "S", "Q", "N"];


this.possiblesolution = new String(); //highest solution within gameletters
                //e.g. "QUEENSHIP" (related to above letters) 

this.wordBank = new Array(); 
               //array of arrays structure is formated around alphabet with an array for each character:
               /* 
                a: Array(7295)
                b:Array(7271)
                c:Array(11381)
                d:Array(7216)
                ... 
                y:Array(607)
                z:Array(623)
               */

【问题讨论】:

你的字典存放在哪里? 我将它存储为一个多维数组 this.wordBank 它存储的 wordBank 按字符的字母顺序排序,然后在每个字符数组中按字母顺序排列该字母中的所有单词 this.wordBank[character][characterword ] 【参考方案1】:

递归策略是一个简单的解决方案,但如果你的游戏字母数组变得太大,它确实会减慢执行速度。不过对于像拼字游戏这样的游戏,应该足够了。

Fiddle

var gameletters = ["P", "E", "H", "E", "U", "I", "S", "Q", "N"];
var wordbank = 
  "a": Array(3461),
  "b": Array(2391),
  //...
;

var matches = ;

function step(word, letters) 
  for(var i = 0, len = letters.length; i < len; i++) 

    var arr = letters.map(a => a);
    if (arr.length === 0) 
      return;
    

    var letter = arr[i];
    arr.splice(i,1);
    test(word + letter);

    if (arr.length) 
      step(word + letter, arr)
    
  


function test(word) 
  var firstLetter = word.substr(0,1);
  if (wordbank[firstLetter].indexOf(word) >= 0) 
    matches[word] = 1;
  


step("", gameletters);

【讨论】:

以上是关于将混杂数组与字符串匹配的函数的主要内容,如果未能解决你的问题,请参考以下文章

javascript - 将字符串与正则表达式数组匹配

将数组的值与字符串 PHP 匹配

如何将字符串与字符串数组匹配

【JS】数组对象自定义排序

如何将带有无效字符(重音)的 Pandas 数据框与数组匹配? [复制]

将字符串与通配符模式匹配的递归函数