LeetCode 题解(19): Scramble String
来源:互联网 发布:mac忘记密码怎么办 编辑:程序博客网 时间:2024/05/22 01:39
题目:
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 ifs2 is a scrambled string ofs1.
题解:
递归解法,但是无法通过时间限制。递归时那一陀计算substr的操作一定要谨慎。准备琢磨一下动态规划做法。
class Solution {public: bool isScramble(string s1, string s2) {if(s1.length() == 1) if(s1.compare(s2) == 0) return true; bool result = false; isScrambleRecursion(s1, s2, result); return result; } bool isScrambleRecursion(string s1, string s2, bool& result) { if(s1.length() == 1) if(!s1.compare(s2)){return true;} for(int div = 0; div < s1.length()-1; div++) {result = (isScrambleRecursion(s1.substr(0, div+1), s2.substr(0, div+1), result) && isScrambleRecursion(s1.substr(div+1, s1.length()-div-1), s2.substr(div+1, s2.length()-div-1), result)) || (isScrambleRecursion(s1.substr(0, div+1), s2.substr(s2.length()-1-div, div+1), result) && isScrambleRecursion(s1.substr(div+1, s1.length()-div-1), s2.substr(0, s2.length()-div-1), result));if(result)return true; } }};
还是递归,进行了一下“剪枝”,大大减少了不必要的比较次数,16ms通过。
class Solution {public: bool isScramble(string s1, string s2) {if(s1.length() == 1) if(s1.compare(s2) == 0) return true; bool result = false; isScrambleRecursion(s1, s2, result); return result; } bool isScrambleRecursion(string s1, string s2, bool& result) { if(s1.length() == 1) if(!s1.compare(s2)){return true;} int A[26] = {0}; for(int i = 0; i < s1.length(); i++) ++A[s1[i]-'a']; for(int j = 0; j < s2.length(); j++) --A[s2[j]-'a']; for(int k = 0; k < 26; k++) if(A[k] != 0) return false; for(int div = 0; div < s1.length()-1; div++) {result = (isScrambleRecursion(s1.substr(0, div+1), s2.substr(0, div+1), result) && isScrambleRecursion(s1.substr(div+1, s1.length()-div-1), s2.substr(div+1, s2.length()-div-1), result)) || (isScrambleRecursion(s1.substr(0, div+1), s2.substr(s2.length()-1-div, div+1), result) && isScrambleRecursion(s1.substr(div+1, s1.length()-div-1), s2.substr(0, s2.length()-div-1), result));if(result)return true; } }};
- LeetCode 题解(19): Scramble String
- [题解][LeetCode][Scramble String]
- 【leetcode题解】3 - Scramble String
- LeetCode(87) Scramble String
- LeetCode | Scramble String(字符交换)
- LeetCode 87. Scramble String(字符串扰乱)
- leetcode 87 Scramble String(递归+剪枝)
- leetcode 87 Scramble String(动态规划)
- LeetCode : Scramble String
- [LeetCode] Scramble String
- [LeetCode] Scramble String
- [Leetcode] Scramble String
- [leetcode] Scramble String
- LeetCode: Scramble String
- [LeetCode]Scramble String
- [leetcode]Scramble String
- Leetcode:Scramble String
- LeetCode-Scramble String
- 如何更改linux文件的拥有者及用户组(chown和chgrp)
- 追踪uboot下tftp命令的代码执行过程
- MySQL必知必会之10-14
- C#文件与流(FileStream、StreamWriter 、StreamReader 、File、FileInfo、Directory、DirectoryInfo、Path、Encoding)
- JAVA_数组排序方法
- LeetCode 题解(19): Scramble String
- Evaluate Reverse Polish Notation
- 专家分享:IBM Lotus系列专场课件
- asp.net 中uploadify上传图片在火狐中报 http error (302)错误解决方案
- JsonHelper 帮助类
- ios--对话框异常--wait_fences: failed to receive reply: 10004003
- oracle安装之后,plsql如何连数据库
- 程序员学习英语
- js dorado 返回path