带有 Javascript 的多个单词 Anagram

Posted

技术标签:

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

我一直在使用来自this thread 的JSFiddle,但不知道 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);
        

【问题讨论】:

请在问题中包含相关代码,而不是仅链接到外部资源。 【参考方案1】:

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

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

【讨论】:

以上是关于带有 Javascript 的多个单词 Anagram的主要内容,如果未能解决你的问题,请参考以下文章

查看 div 是不是包含一个或多个输入的单词(Javascript)

Javascript RegExp 用于精确匹配具有特殊字符的多个单词

带有对象的Javascript三元运算符

使用CSS和javascript制作带有不同样式的单词的段落的正确方法是什么

在文本区域中添加带有热键和javascript的文本

如何从 RegExp 中由 OR 运算符分隔的多个单词中首先匹配更大的单词?使用 java 脚本