判断通过操作能否让字符串相等 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) {
// 0 2, 0 4, 1 3, 1 5, 2 4, 3 5
// 0 2
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;
};