javascript - 使用 javascript 中的单个映射检查同构字符串

标签 javascript algorithm

<分区>

如果一个单词中的字母可以重新映射以获得第二个单词,则两个单词被称为同构。重新映射字母意味着用另一个字母替换所有出现的字母,同时字母的顺序保持不变。没有两个字母可以映射到同一个字母,但是一个字母可以映射到它自己。

Example: 
('ABC','XYZ') //true
('ABCCBA','XYZZYX') //true
('ABCABC','XYXXYX') //false

我的代码使用了两个 hashmap。有没有办法使用单个 HashMap 来做到这一点?

使用两个 map 的代码:

 function isomorphic(str1, str2){
        if(str1.length !== str2.length) return false;
        var map1={}, map2={};

        for (var i=0; i< str1.length;i++) {
            if (typeof map1[str1[i]] == "undefined" && typeof map2[str2[i]] == "undefined"){
                map1[str1[i]] = str2[i];
                map2[str2[i]] = str1[i];
            }
            else{
                if(map1[str1[i]] !== str2[i] && map2[str2[i]] !== str1[i]){
                    return false;
                }
            }
        }
        return true;
    }

最佳答案

这应该可行

function isomorphic(str1, str2) {
    if (str1.length !== str2.length) {
        return false;
    }
    var map = {};
    for(var i = 0; i < str1.length; i++) {
        var a = str1[i]; 
        var b = str2[i];
        if (typeof map[a] === "undefined") {
            map[a] = b;

        // check for error in first tuple ("ABB", "XYZ")
        } else if (map[a] !== b) {
            return false;
        }

        // check for error in second tuple ("ABC", "XYY")
        for (var key in map) {
            if (key !== a && b === map[key]) {
                return false;
            }
        }
    }
    return true;
}

isomorphic("ABC", "XYZ"); //true
isomorphic("ABCCBA", "XYZZYX"); //true
isomorphic("ABCABC", "XYXXYX"); // false

关于javascript - 使用 javascript 中的单个映射检查同构字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33246706/

相关文章:

javascript - 将几个json传递给javascript

javascript正则表达式并在 "dash"之后 trim 所有内容

java - 将同名的单选按钮传递给 servlet

javascript - jQuery 动态表单提交

c++ - 将 vector 限制在最小值和最大值?

java - AHP 算法仅适用于 3 个标准

javascript - 安卓-Javascript : how to execute jquery in webview

algorithm - 选择排序算法的改进?

algorithm - 为什么不使用 1-5 的随机数组合生成随机数 1-7?

ruby - 添加总和等于最大元素的数组元素