【问题标题】:Multiple Word Anagram with Javascript带有 Javascript 的多个单词 Anagram
【发布时间】:2017-06-17 07:09:48
【问题描述】:

我一直在使用来自this threadJSFiddle,但不知道 1) 如何让它与多个单词一起工作,例如如果我输入了

苹果香蕉

获取输出

苹果香蕉,香蕉苹果

2) 如果我更改变量以包含多个单词字符串,例如:

var dictionary = [
"apple",
"banana",
"orange",
"pear",
"mandarin orange" ];

我可以输入

橘子

获取输出

橘子

这是上面JSFiddle中的相关代码

var maxCount = 10000;
var dictionary = [
    "apple",
    "banana",
    "orange",
    "pear",
    "watermelon"
];

function isValidWord(word) {
    for(var i = 0, n = dictionary.length; i < n; i++) {
        if(word === dictionary[i]) {
            return true;
        }
    }
    return false;
}

/**
Generates all of the anagrams using a dictionary and an exclusion list read from
an HTML form.
*/
function runAnagramGenerator(anagramString, excludesString, tout) {
    var excludes = getExclusionList(excludesString);
    var anagrams = [];
    generateAnagrams("", anagramString, excludes, anagrams);
    //Remove duplicates
    uniqueAnagramList = anagrams.filter(function(elem, pos, self) {
        return self.indexOf(elem) == pos;
    });
    console.log('Anagrams: ' + uniqueAnagramList.length);
    tout.value = "";
    for(var i = 0, n = uniqueAnagramList.length; i < n; i++) {
        tout.value += uniqueAnagramList[i] + "\r\n";
    }
}

function getExclusionList(excludesString) {
    var excludes = [];
    if (excludesString != "") {
        var excludesArray = excludesString.split(",");
        for(var i = 0, n = excludesArray.length; i < n; i++) {
            excludes.push(new RegExp(excludesArray[i]));
        }
    }
    return excludes;
}

function generateAnagrams(prefix, postfix, excludes, resultArray) {
    if(resultArray.length >= maxCount) return;

    if (postfix == "") {
        var meetsConditions = true;
        if(isValidWord(prefix) === false) meetsConditions = false;
        for(var i = 0, n = excludes.length; i < n; i++) {
            if(prefix.match(excludes[i]) != null) {
                meetsConditions = false;
                break;
            }
        }
        if(meetsConditions) {
            resultArray.push(prefix);
        }
    }
    for(var i = 0, n = postfix.length; i < n; i++) {
        var prefix2 = prefix + postfix.charAt(i);
        var postfix2 = postfix.substring(0,i) + postfix.substring(i+1);
        generateAnagrams(prefix2, postfix2, excludes, resultArray);
    }    
}

【问题讨论】:

  • 请在问题中包含相关代码,而不是仅链接到外部资源。

标签: javascript html anagram


【解决方案1】:

1) 将isValidWord改为containsValidWord,稍微改写逻辑

2) 如果您有一个仅由空格组成的剩余前缀,则您有一个匹配项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2011-02-09
    • 2019-05-21
    • 2018-11-26
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2014-04-22
    相关资源
    最近更新 更多