【LeetCode练习题】Scramble String
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 tTo 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 tWe 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 aWe 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.
解题思路:
要满足isScramble(string s1,string s2),则必然满足isScramble(s11,s21)&&isScramble(s12,s22)或者isScramble(s11,s22)&&isScramble(s12,s21)
递归结束条件,当s1.compare(s2) == 0 时return false,即s1 和 s2 都只有一个字符且相等的时候。
当排序的sort1 ,sort2 不相等,即说明s1 和 s2 中的字符不同,return false,加上这个检查就可以大大的减少递归次数。否则就会超时。
每一次调用的s1 和 s2 的长度都是相等的,所以isScramble(s11,s21)&&isScramble(s12,s22)的时候s11.size() == s21.size(),
isScramble(s11,s22)&&isScramble(s12,s21)的时候s11.size() == s22.size()。
还有动态规划的解法,目前还不太熟,正在研究中……
代码如下:
class Solution {
public:
bool isScramble(string s1, string s2) {
string sort1 = s1,sort2 = s2;
sort(sort1.begin(),sort1.end());
sort(sort2.begin(),sort2.end());
if(sort1.compare(sort2) != )
return false;
if(s1.compare(s2) == )
return true;
int len = s1.size();
for(int i = ; i < len; i++){
string s11 = s1.substr(,i);
string s12 = s1.substr(i);
string s21 = s2.substr(,i);
string s22 = s2.substr(i);
if(isScramble(s11,s21)&&isScramble(s12,s22))
return true;
s21 = s2.substr(,len-i);
s22 = s2.substr(len-i);
if(isScramble(s11,s22)&&isScramble(s12,s21))
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]87. Scramble String字符串树形颠倒匹配
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- [leetcode] 87. Scramble String (Hard)
题意: 判断两个字符串是否互为Scramble字符串,而互为Scramble字符串的定义: 字符串看作是父节点,从字符串某一处切开,生成的两个子串分别是父串的左右子树,再对切开生成的两个子串继续切开, ...
- [LeetCode] 87. Scramble String 搅乱字符串
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- [LeetCode] 87. 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 (hard)★
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- Leetcode#87 Scramble String
原题地址 两个字符串满足什么条件才称得上是scramble的呢? 如果s1和s2的长度等于1,显然只有s1=s2时才是scramble关系. 如果s1和s2的长度大于1,那么就对s1和s2进行分割,划 ...
- leetcode@ [87] Scramble String (Dynamic Programming)
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- leetcode[86] Scramble String
将一个单词按照这种方式分: Below is one possible representation of s1 = "great": great / \ gr eat / \ / ...
- leetCode 87.Scramble String (拼凑字符串) 解题思路和方法
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
随机推荐
- codecomb 2092【课程选择】
题目描述 大学选课总是烦恼着很多人.现在X同学选出了很多备选课,但是有的课程之间是有时间冲突的.X不会分身,自然无法在同一个时间上不同的课.每个课可能有很多备选时间,但是每个课只需要选一个时间上就可以 ...
- python刷取CSDN博文访问量之一
python刷取CSDN博文访问量之一 作者:vpoet 注:这个系列我只贴代码,代码不注释.有兴趣的自己读读就懂了,纯属娱乐,望管理员抬手 若有转载一定不要注明来源 #coding=utf-8 ...
- easy_install django==1.4.2_百度搜索
easy_install django==1.4.2_百度搜索 安装指定版本的django
- 《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章
<如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章 问题: VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何 ...
- 一张图讲解为什么需要自己搭建自己的git服务以及搭建的途径
图片信息量有点大.不废话上图 图中的一些链接: gitlab官方安装文档 https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/in ...
- Unity 获取服务器时间 HTTP请求方式
在写每日签到的时候,我居然使用的是本地时间...被项目经理笑哭了...., 如果你在写单机游戏,没有游戏服务器,但又不想使用本地时间,就可以采用下面方法. 方法总结: 1. 使用HTTP请求获取服务器 ...
- HDU 4333 Revolving Digits 扩展KMP
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 题意:给以数字字符串,移动最后若干位到最前边,统计得到的数字有多少比原来大,有多少和原来同样,有多少 ...
- Ubuntu+Eclipse+ADT+Genymotion+VirtualBox开发环境搭建
1.Eclispe安装就不说了 2.以下说说怎样安装ADT插件.有两种途径: (1)在线安装: 地址:https://dl-ssl.google.com/android/eclipse/(只是近期天朝 ...
- Atom编辑器
Atom介绍 Github的员工Nathan Sobo在Atom的博客中提到:”Sublime和TextMate十分方便,但是扩展性不足:另一方面,Emacs和 Vim扩展性很强却需要学习日程工作中很 ...
- C# DES 加密解密
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.S ...