Leetcode 87. Scramble String
2016-04-06 13:31
447 查看
Question
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.
Code
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[] chars1 = s1.toCharArray(); char[] chars2 = s2.toCharArray(); Arrays.sort(chars1); Arrays.sort(chars2); if (!Arrays.equals(chars1, chars2)) { return false; } for (int i = 1; i < s1.length(); ++i) { if (isScramble(s1.substring(0, i), s2.substring(0, i)) && isScramble(s1.substring(i), s2.substring(i))) { return true; } if (isScramble(s1.substring(0, i), s2.substring(s2.length() - i)) && isScramble(s1.substring(i), s2.substring(0, s2.length() - i))) { return true; } } return false; }
相关文章推荐
- Vagrant
- leetcode 44. Wildcard Matching
- VC6.0按回车键执行相关功能
- [设计]用户设计10原则
- 【数据结构】KMP算法
- 网络爬虫开发技术——入门
- java实现多线程
- 为什么你的工作经验不值钱
- Bootstrap 代码
- 冒泡排序
- 常见源码分析
- Python变量、数据类型6
- javascript性能优化-repaint和reflow
- Android事件系统(1)
- 复利计算5.0——结对编程
- win10系统安装XAMPP后apache无法启动的解决方法
- 织梦dedecms调用栏目的SEO标题、描述、关键字的方法
- ccf+字符串的处理,就是string的使用
- 打包自己的framework(Xcode7&OSX10.11)兼容各种cpu类型
- NBUT 1225 NEW RDSP MODE I