87.扰乱字符串

扰乱字符串

给你两个长度相等的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。

解析

记忆化递归:枚举分割点,检查两种交换方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var isScramble = function (s1, s2) {
const memo = new Map();
function dfs(a, b) {
if (a === b) return true;
const key = a + '#' + b;
if (memo.has(key)) return memo.get(key);
if (a.length !== b.length || [...a].sort().join('') !== [...b].sort().join('')) {
memo.set(key, false); return false;
}
const n = a.length;
for (let i = 1; i < n; i++) {
if ((dfs(a.slice(0, i), b.slice(0, i)) && dfs(a.slice(i), b.slice(i))) ||
(dfs(a.slice(0, i), b.slice(n - i)) && dfs(a.slice(i), b.slice(0, n - i)))) {
memo.set(key, true); return true;
}
}
memo.set(key, false); return false;
}
return dfs(s1, s2);
};

87.扰乱字符串
https://leetcode.lz5z.com/87.scramble-string/
作者
tickli
发布于
2024年1月10日
许可协议