繁体   English   中英

如何检查一串字,看它们是否是一个字的字谜

[英]How can I check a string of words to see if they are an anagram of one word

我正在尝试找出一个可帮助解决此测试的JavaScript函数。 我需要能够确定所给出的单词字符串(var匹配项)是否是我正在运行的单词(var subject)的字谜。 在这种情况下,将没有匹配项。 任何和所有帮助将不胜感激。 先感谢您!

var anagram = require('./anagram');

describe('Anagram', function() {

    it("no matches",function() {
        var subject = anagram("diaper");
        var matches = subject.matches([ "hello", "world", "zombies", "pants"]);

        expect(matches).toEqual([]);
    });
});

这是我到目前为止的内容:

for (var i = 0; i < matches.length; i++) {
    if (subject.length != matches[i].length) {
        return false
    } else if (subject.length == matches[i].length){
    var anagram = function(subject, matches) {
        return subject.split("").sort("").join("") === matches[i].split("").sort("").join("");
    };
}

在这里找到并且有效: https : //gist.github.com/AlbertoElias/10005056

function areAnagrams(a, b) {
    var c = false;
    if (a.length !== b.length) {
        return c;
    }

    var hashMap = {};
    var char;
    var i;
    for (i=0;i<a.length;i++) {
        char = a[i];
        hashMap[char] = hashMap[char] !== undefined ? hashMap[char]+1 : 1;
    }

    for (i=0;i<b.length;i++) {
        char = b[i];
        if (hashMap[char] !== undefined) {
            if (hashMap[char] > 1) {
                hashMap[char]--;
            } else {
                delete hashMap[char];
            }
        } else {
            return c;
        }
    }

    if (Object.keys(hashMap).length === 0) c = true;

    return c;
}

这是小提琴:

http://jsfiddle.net/hn8r4v3u/2/

正如您所做的那样,我在函数中按字母顺序将单词中的字母按字母顺序排列。

function getAlphaSortedWord(word) {
    var baseWordCharArray = word.split("");
    baseWordCharArray.sort();
    return baseWordCharArray.join("");
}

该代码已设置:

var baseWord = getAlphaSortedWord("bob");
var thingsToCheck = ["obb", "2", "bob", "", "bo", "ob"];

然后用两种方法解决它,一次使用过滤器,一次不使用过滤器。

var matches = _.filter(thingsToCheck, function (str) {
    return (baseWord === getAlphaSortedWord(str));
});


var matches2 = [];
for (index = 0; index < thingsToCheck.length; index++) {
    if (baseWord === getAlphaSortedWord(thingsToCheck[index])) {
        matches2.push(thingsToCheck[index]);
    }
}

您应该能够使用这些数据与真实数据相结合,以使测试通过。

注意,如果这将是生产代码,我会在函数中添加“ is string”的含义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM