Skip to content

Leetcode 51-100

87. 扰乱字符串

位压缩的记忆化搜索。

cpp
class Solution {
    unordered_map<int, bool> res;

public:
    bool dfs(const string& s1, const string& s2, int x1, int x2, int n) {
        if (n == 1) return s1[x1] == s2[x2];
        int index = (x1 << 10) | (x2 << 5) | n;
        if (res.find(index) != res.end()) return res[index];
        for (int i = 1; i < n; ++i) {
            if (dfs(s1, s2, x1, x2, i) && dfs(s1, s2, x1 + i, x2 + i, n - i)) {
                res[index] = true;
                return true;
            }
            if (dfs(s1, s2, x1, x2 + n - i, i) &&
                dfs(s1, s2, x1 + i, x2, n - i)) {
                res[index] = true;
                return true;
            }
        }
        res[index] = false;
        return false;
    }
    bool isScramble(string s1, string s2) {
        res.clear();
        return dfs(s1, s2, 0, 0, (int)s1.size());
    }
};

92. 反转链表 II

@medium 逐个反转链表节点。

cpp