所以,基本上。我正在尝试做的是创建一个单词unscrambler,在那里你放入一个混乱的单词并解读它。它工作正常,虽然我单独检查每个角色,由于某种原因,额外的角色会漏掉。
我输入"olehl (hello)"
,它会返回"dhole, haole, helio, hello, helos, helot, holed, holes, holey, hosel, hotel, hovel, hoyle, mohel, sheol, thole, whole"
。我不知道"mohel"
和"dhole"
之类的内容是如何进入的。
我的代码:
function unscramble(word) {
var words = require("an-array-of-english-words");
var matched = [];
words.forEach((x) => {
if(word.length != x.length) {
} else {
if(matched.length == 42) return;
var newword = word.split('');
var added = 0;
var i = 0;
for(i = 0; i <= newword.length-1; i++) {
if(x.indexOf(newword[i]) >= 0) added++;
if(i == word.length-1 && added == word.length && added == x.length) matched.push(x);
}
}
});
return matched;
}
答案 0 :(得分:1)
x.indexOf(newword[i])
没有的字符, newword
仍然可以为真。因此,hello
仍然可以与dhole
匹配,因为它们的长度相同,l
匹配两次。如果您只希望它匹配hello
而不是heloo
(不同数量的相同字母),您还需要跟踪消费的字母。
您可以通过多种方式执行此操作,但实际上会删除x
中找到的字母。
const idx = x.indexOf(newword[i]);
if (-1 !== idx) {
added++;
// remove this character
// You will have to keep track of the original length of `x` as well
x = x.substring(0, idx) + x.substring(idx + 1, x.length);
}
您还可以对x
和newword
进行排序,并比较生成的字符串/数组。
答案 1 :(得分:0)
我同意Explosion Pills。如下所示(不是js,只是大纲)?
function unscramble(word)
var dictionary = some_array_of_words
var matches = []
var sortedWord = word.split('').sort().join('') // sort the word
dictionary.forEach(dictionaryWord) {
if (sortedWord.length == dictionaryWord.length) {
sortedDictionaryWord = dictionaryWord.split('').sort().join('')
if sortedWord == sortedDictionaryWord {
matches.push (dictionaryWord)
}
}
}
return matches
}