Scramble String
2016-07-21 23:00
387 查看
Given a string
Below is one possible representation of
To scramble the string, we may choose any non-leaf node and swap its two children.
For example, if we choose the node
We say that
Similarly, if we continue to swap the children of nodes
We say that
Given two strings
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
s1and
s2of the same length, determine if
s2is a scrambled string of
s1.
public class Solution { /** * @param s1 A string * @param s2 Another string * @return whether s2 is a scrambled string of s1 */ public boolean isScramble(String s1, String s2) { if (s1.length() != s2.length()) return false; if (s1.equals(s2)) return true; if (!isValid(s1, s2)) { return false; } for (int i = 1; i < s1.length(); i++) { String s11 = s1.substring(0, i); String s12 = s1.substring(i); String s21 = s2.substring(0, i); String s22 = s2.substring(i); String s23 = s2.substring(0, s2.length() - i); String s24 = s2.substring(s2.length() - i); if (isScramble(s11, s21) && isScramble(s12, s22) || isScramble(s11, s24) && isScramble(s12, s23)) { return true; } } return false; } private boolean isValid(String s1, String s2) { char[] arr1 = s1.toCharArray(); char[] arr2 = s2.toCharArray(); Arrays.sort(arr1); Arrays.sort(arr2); if (!(new String(arr1)).equals(new String(arr2))) { return false; } return true; } }
相关文章推荐
- Java备份还原Mysql数据库(struts2未测试)
- Objective-C & Sprite Kit太空历险记 : 4. 打造作战单位——面向对象编程(上)
- linux常用命令(一):目录处理命令
- 【Leetcode】53. Maximum Subarray【动态规划】
- LeetCode - 150. Evaluate Reverse Polish Notation
- Block(五)heap-stack-memory
- python report中文显示乱码
- L1-017. 到底有多二-PAT团体程序设计天梯赛GPLT
- 类的封装
- apk签名制作
- apk签名制作
- UVa 12563
- 虚拟化三、Xen虚拟化技术2
- Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
- 数字签名是什么?
- jxl生成和解析Excel
- git工作流程
- 主题:vsftpd之虚拟用户
- poj 2752 KMP(next数组的运用)
- Objective-C & Sprite Kit太空历险记 : 3. 军官训练营——控制你的代码