题目大意
https://leetcode.com/problems/scramble-string/
一个字符串可以在中间任意的位置分割成两个非空串,每个非空串可以继续如此操作下去。对形成的树的任意非叶子结点可以进行交换两个子节点,最后所有叶子结点从左向右就形成了一个新串,现在给你两个字符串s1和s2,判断是否属于这种关系。
题目分析
动态规划,可以用记忆化搜索实现,我写的版本不是最佳答案,我用了三维数组做记忆,第一维是s1的下标,第二维是s2的下标,第三维是字符串的长度。注意实现细节上,要对分割点进行枚举,同时要考虑调换的情况。然后有些小的优化的地方可以看下代码注释。
代码
|
|
复杂度:O(n ^ 4)