[Leetcode] 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.
Solution:
public class Solution {
public boolean isScramble(String s1, String s2) {
if(s1.equals(s2))
return true;
int l1=s1.length();
int l2=s2.length();
if(l1!=l2)
return false;
if(l1==0)
return true;
if(l1==1)
return s1.equals(s2);
char[] c_s1=s1.toCharArray();
char[] c_s2=s2.toCharArray();
Arrays.sort(c_s1);
Arrays.sort(c_s2);
for(int i=0;i<c_s1.length;++i){
if(c_s1[i]!=c_s2[i])
return false;
}
boolean b=false;
for(int i=1;i<l1&&!b;++i){
String s11=s1.substring(0,i);
String s12=s1.substring(i);
String s21=s2.substring(0,i);
String s22=s2.substring(i);
b=isScramble(s11, s21)&&isScramble(s12, s22);
if(!b){
String s31=s2.substring(0, l1-i);
String s32=s2.substring(l1-i);
b=isScramble(s11, s32)&&isScramble(s12, s31);
}
}
return b;
}
}
------------------------------------------------------------------------------------
20150220:
public class Solution {
public boolean isScramble(String s1, String s2) {
if(s1==null||s2==null||s1.length()!=s2.length())
return false;
if(s1.equals(s2))
return true;
char[] c1=s1.toCharArray();
char[] c2=s2.toCharArray();
Arrays.sort(c1);
Arrays.sort(c2);
for(int i=0;i<c1.length;++i){
if(c1[i]!=c2[i])
return false;
}
int N=s1.length();
for(int i=1;i<N;++i){
String s1_temp1=s1.substring(0,i);
String s1_temp2=s1.substring(i);
String s2_temp1=s2.substring(0,i);
String s2_temp2=s2.substring(i);
if(isScramble(s1_temp1, s2_temp1)&&isScramble(s1_temp2, s2_temp2))
return true;
String s2_temp3=s2.substring(0,N-i);
String s2_temp4=s2.substring(N-i);
if(isScramble(s1_temp1, s2_temp4)&&isScramble(s1_temp2, s2_temp3))
return true;
}
return false;
}
}
[Leetcode] Scramble String的更多相关文章
- Leetcode:Scramble String 解题报告
Scramble String Given a string s1, we may represent it as a binary tree by partitioning it to two no ...
- [LeetCode] Scramble String -- 三维动态规划的范例
(Version 0.0) 作为一个小弱,这个题目是我第一次碰到三维的动态规划.在自己做的时候意识到了所谓的scramble实际上有两种可能的类型,一类是在较低层的节点进行的两个子节点的对调,这样的情 ...
- [LeetCode] Scramble String 爬行字符串
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- [leetcode]Scramble String @ Python
原题地址:https://oj.leetcode.com/problems/scramble-string/ 题意: Given a string s1, we may represent it as ...
- [LeetCode] Scramble String(树的问题最易用递归)
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- [Leetcode] scramble string 乱串
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- [LeetCode] Scramble String 字符串 dp
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- 【一天一道LeetCode】#87. Scramble String
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- 【leetcode】Scramble String
Scramble String Given a string s1, we may represent it as a binary tree by partitioning it to two no ...
随机推荐
- ASP.NET MVC中ViewData、ViewBag和TempData
1.ViewData 1.1 ViewData继承了IDictionary<string, object>,因此在设置ViewData属性时,传入key必须要字符串型别,value可以是任 ...
- 重温WCF之WCF中可靠性会话(十四)
1.WCF中可靠性会话在绑定层保证消息只会被传输一次,并且保证消息之间的顺序.当使用TCP(Transmission Control Protocol,传输控制协议)通信时,协议本身保证了可靠性.然而 ...
- .net学习之泛型、程序集和反射
一.泛型1.CLR编译时,编译器只为MyList<T>类型产生“泛型版”的IL代码——并不进行泛型的实例化,T在中间只充当占位符.例如:MyList 类型元数据中显示的<T> ...
- HTML5学习之文件操作(九)
之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很进行跨平台的处理,另外就是让我们的web应用依赖了第三方的插件,而不是很独立 ...
- Linux Shell 高级编程技巧3----运行级别脚本介绍
3.运行级别脚本介绍 3.1.运行级别 运行级别介绍: 0 关机 1 单用户模式 2 多用户模式 ...
- 学习ASP.NET缓存机制
缓存是大型BS架构网站的性能优化通用手段,之前知道有这个概念,并且也知道很重要,但是一直没静下心来了解.这次借着学习PetShop源码的机会熟悉一下ASP.NET基本的缓存机制(生产环境中的真实缓存有 ...
- 安装VS2010水晶报表插件
Visual Studio 2010默认不带水晶报表,需要安装一个水晶报表插件,首先下载此插件: http://downloads.businessobjects.com/akdlm/cr4vs201 ...
- 单例模式/singleton模式/创建型模式
Java实现要点: 私有构造方法 线程安全(并发的考虑) 延迟加载(效率的考虑,对于较大的类在使用时在加载) 公有方法访问单一实例 常见单例模式代码及问题 //无延迟加载,常驻内存(即使不使用) cl ...
- 接口API测试和返回值JSON解析的插件
火狐插件1. HttpRequest作用:接口API测试例子:http://192.168.10.61:8080/ZHCS/user/loginApp.do?phone=admin&pwd ...
- CentOS安装中文支持
部分文档突然成乱码了. 解决方法: 1.安装中文支持包 # yum groupinstall "Chinese Support" 2 修改# /etc/sysconfig/i18n ...