13.7 Scramble String
来源:互联网 发布:销售奖励政策 知乎 编辑:程序博客网 时间:2024/05/22 01:53
Link: https://oj.leetcode.com/problems/scramble-string/
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.
Below is one possible representation of s1 = "great":
great / \ gr eat / \ / \g r e at / \ a t
To scramble the string, we may choose any non-leaf node and swap its two children.
For example, if we choose the node "gr" and swap its two children, it produces a scrambled string "rgeat".
rgeat / \ rg eat / \ / \r g e at / \ a t
We say that "rgeat" is a scrambled string of "great".
Similarly, if we continue to swap the children of nodes "eat" and "at", it produces a scrambled string "rgtae".
rgtae / \ rg tae / \ / \r g ta e / \ t a
We say that "rgtae" is a scrambled string of "great".
Given two strings s1 and s2 of the same length, determine if s2 is a scrambled string of s1.
My thought: no idea.Approach: 3D-DP. Time: O(n^4), Space: O(n^3)
Refer: Dai's code
public class Solution { public boolean isScramble(String s1, String s2) { if(s1== null || s2 == null ||s1.length()!=s2.length()) return false; if(s1.length() == 0) return true; int n = s1.length(); //since the 3rd dimension is the length of boolean[][][] result = new boolean[n][n][n+1]; //init: two single chars are scrambled for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ result[i][j][1] = s1.charAt(i) == s2.charAt(j); } } for(int len = 2; len <=n; len++){ for(int i = 0; i+len<= n; i++){//note: i+len<=n, not i<=n for(int j = 0; j+len<= n; j++){//note: j+len<=n, not j<=n for(int k = 1; k < len; k++){//why not k = [0,len]? result[i][j][len] = (result[i][j][k] && result[i+k][j+k][len-k]) || (result[i][j+len-k][k] && result[i+k][j][len-k]); if(result[i][j][len] == true) break; } } } } return result[0][0][n]; }}
- 13.7 Scramble String
- LeetCode 13.7 Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- Scramble String
- scramble string
- Trie实践:一种比哈希表更快的数据结构
- C# 序列化实现类的深拷贝
- HTML ——表单标记(html控件)
- codeforce 259A 最新题解 第二场
- Android actionBar
- 13.7 Scramble String
- Codeforces Round #259 (Div. 2) C. Little Pony and Expected Maximum
- 【一维dp_线性扫描】Word Break 、Best time to Buy and Sell Stocks |||、max subarray、jump game |||
- Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shif
- 13.8 Minimum Path Sum
- Codeforces Round #259 (Div. 2) A. Little Pony and Crystal Mine
- 【字符串匹配】KMP(implement strStr()), 正则匹配(Wildcard Matching),2-dim 动规(regular expression)
- Codeforces Round #259 (Div. 2) (最差的一次比赛。说多了都是泪)
- [算法浅析] 如何在O(1)的时间里删除单链表的结点