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.
public class Solution { public boolean isScramble(String s1, String s2) { if (s1.length() != s2.length()) { return false; } if (s1.length()==1 && s2.length()==1) { return s1.charAt(0) == s2.charAt(0); } char[] arr1 = s1.toCharArray(); char[] arr2 = s2.toCharArray(); Arrays.sort(arr1); Arrays.sort(arr2); if (!new String(arr1).equals(new String(arr2))) { return false; } if (s1.equals(s2)) { return true; } for (int split = 1; split < s1.length(); split++) { String s11 = s1.substring(0, split); String s12 = s1.substring(split); String s21 = s2.substring(0, split); String s22 = s2.substring(split); if(isScramble(s11, s21) && isScramble(s12, s22)) { return true; } s21 = s2.substring(0, s2.length() - split); s22 = s2.substring(s2.length() - split); if(isScramble(s11, s22) && isScramble(s12, s21)) { return true; } } return false; } }
相关推荐
python python_leetcode题解之087_Scramble_String
javascript js_leetcode题解之87-scramble-string.js
c语言基础 c语言_leetcode题解之0087_scramble_string.zip
3. 题目87:扫描线排序 (Scramble String) 这是一个字符串处理问题,通过递归地分割字符串并比较子串的排序来判断是否为原始字符串的乱序版本。解题策略通常包括字符串处理、递归和排序。 4. 题目79:单词搜索 ...
13. 字符串处理高级问题:如Scramble String(错乱字符串),验证字符串的变换是否有效。 14. 正则表达式匹配问题:考察对正则表达式的理解和应用。 15. 位操作问题:例如Majority Element(多数元素)、First ...
1. 字符串操作:在Java中,`String`类提供了丰富的操作方法,如`toCharArray()`用于将字符串转换为字符数组,便于对每个字符进行独立操作;`shuffle()`或自定义的随机排序算法可以用来打乱字符顺序;`equals()`则...
如果使用-scramble不带级别参数,则相当于-scramble:package 2.2 Jocky for Ant 近年来,Ant已经成为Java应用开发中打包工具的事实上的标准。在应用的开发过程中,我们往往都会有一个Ant脚本,通过该脚本,能够对...
如果使用-scramble不带级别参数,则相当于-scramble:package 2.2 Jocky for Ant 近年来,Ant已经成为Java应用开发中打包工具的事实上的标准。在应用的开发过程中,我们往往都会有一个Ant脚本,通过该脚本,...
如果使用-scramble不带级别参数,则相当于-scramble:package 2.2 Jocky for Ant 近年来,Ant已经成为Java应用开发中打包工具的事实上的标准。在应用的开发过程中,我们往往都会有一个Ant脚本,通过该脚本,...
例如,`from scrmbl import scramble`,然后你可以使用`scramble("your_string")`来打乱一个字符串。 Python-scrmbl的命令行界面(CLI)使得非程序员也能轻松使用这个工具。只需在终端输入`scrmbl`加上你想要拼凑的...
// ---- * 读我 * ---- // // --- [ Array.prototype ] --- // 1 . 在 Array.prototype 上编写一系列函数来实现以下功能。 [toString] - 此方法必须获取数组的内容... [scramble] - 此方法必须以混合顺序返回当前上下文
public static void main(String[] args) { SwingUtilities.invokeLater(() -> { PuzzleGame game = new PuzzleGame(); }); } } ``` - **拼图面板实现:** 1. **创建面板类:** - 在`PuzzleGame`包下创建`...
46. String theory:弦理论,物理学中的一个理论,尝试解释所有基本粒子和力的统一模型。 47. Pick up:拿起,捡起,接电话,学得,恢复。 48. Breakup:分手,解散,破裂。 49. Glorious:辉煌的,光荣的,形容...