判断通过操作能否让字符串相等 II
给你两个字符串 s1 和 s2 ,两个字符串长度都为 n ,且只包含 小写 英文字母。
你可以对两个字符串中的 任意一个 执行以下操作 任意 次:
选择两个下标 i 和 j ,满足 i < j 且 j - i 是 偶数,然后 交换 这个字符串中两个下标对应的字符。
如果你可以让字符串 s1 和 s2 相等,那么返回 true ,否则返回 false 。
- 输入:s1 = “abcdba”, s2 = “cabdab”
- 输出:true
解释:我们可以对 s1 执行以下操作:
- 选择下标 i = 0 ,j = 2 ,得到字符串 s1 = “cbadba” 。
- 选择下标 i = 2 ,j = 4 ,得到字符串 s1 = “cbbdaa” 。
- 选择下标 i = 1 ,j = 5 ,得到字符串 s1 = “cabdab” = s2 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| var checkStrings = function(s1, s2) { const len = s1.length; const odd1Map = {}; const odd2Map = {}; const even1Map = {}; const even2Map = {};
for(let i = 0; i < len; i += 2) { even1Map[s1[i]] = (even1Map[s1[i]] || 0) + 1; even2Map[s2[i]] = (even2Map[s2[i]] || 0) + 1; }
for(const c in even1Map) { if(even1Map[c] !== even2Map[c]) { return false; } }
for(let i = 1; i < len; i += 2) { odd1Map[s1[i]] = (odd1Map[s1[i]] || 0) + 1; odd2Map[s2[i]] = (odd2Map[s2[i]] || 0) + 1; }
for(const c in odd1Map) { if(odd1Map[c] !== odd2Map[c]) { return false; } }
return true; };
|