[leetcode-87]Scramble String(java)
2015-09-02 11:17
519 查看
问题描述
分析:这道题实在是几多波折,看到这道题想到应该使用递归的方法,但是如何使用递归却也是煞费苦心,最开始直接递归到长度为1和长度为2时终止,小数据集时可以通过,字符串长的时候就过不了了。然后这时候,我想能不能找到两个字符串的切割点,如果能找到切割点,那么下面的for循环就可以省掉了,但是我没有找到方法,但是这时候我还是没想到可以通过剪枝来减少数据量。
剪枝的方法就是,如果待比较的字符串是scramble的,那么两个字符串中的字符应该是一样的。那如果不一样,就不可能是scramble。所以在每层先进行排序,然后比较这个字符串是否相同。如果不同直接return false; 如代码2
代码如下:TLE
代码如下:328ms
网上还有一种三维DP算法,额,我脑容量小,所以,,
分析:这道题实在是几多波折,看到这道题想到应该使用递归的方法,但是如何使用递归却也是煞费苦心,最开始直接递归到长度为1和长度为2时终止,小数据集时可以通过,字符串长的时候就过不了了。然后这时候,我想能不能找到两个字符串的切割点,如果能找到切割点,那么下面的for循环就可以省掉了,但是我没有找到方法,但是这时候我还是没想到可以通过剪枝来减少数据量。
剪枝的方法就是,如果待比较的字符串是scramble的,那么两个字符串中的字符应该是一样的。那如果不一样,就不可能是scramble。所以在每层先进行排序,然后比较这个字符串是否相同。如果不同直接return false; 如代码2
代码如下:TLE
[code] public boolean isScramble(String s1, String s2) { int length = s1.length(); if(length<=1) return s1.equals(s2); else if(length==2) { StringBuilder news2 = new StringBuilder(); news2.append(s2.substring(1)); news2.append(s2.substring(0, 1)); return s1.equals(s2) || s1.equals(news2.toString()); } boolean res = false; for(int i = 1;i<length;i++){ res = res||(isScramble(s1.substring(0,i),s2.substring(0,i)) && isScramble(s1.substring(i),s2.substring(i))) ||(isScramble(s1.substring(0,i),s2.substring(length-i)) && isScramble(s1.substring(i),s2.substring(0,length-i))); } return res; }
代码如下:328ms
[code]public class Solution { public boolean isScramble(String s1, String s2) { int length = s1.length(); if(s1.equals(s2)) return true; char[] chars1 = s1.toCharArray(); char[] chars2 = s2.toCharArray(); Arrays.sort(chars1);Arrays.sort(chars2); for(int i = 0;i<length;i++) if(chars1[i]!=chars2[i]) return false; boolean res = false; for(int i = 1;i<length;i++){ res = res||(isScramble(s1.substring(0,i),s2.substring(0,i)) && isScramble(s1.substring(i),s2.substring(i))) ||(isScramble(s1.substring(0,i),s2.substring(length-i)) && isScramble(s1.substring(i),s2.substring(0,length-i))); } return res; } }
网上还有一种三维DP算法,额,我脑容量小,所以,,
相关文章推荐
- Java transient关键字使用小记
- Java--Swing组件使用问题详解
- Java--Encode
- java编程之Exception handlers should preserve the original exception
- SpringMVC 使用JSR-303进行校验 @Valid
- SSH项目问题【六】java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- 看马士兵javase视频看第2章基础语法发现错误
- Java性能优化(7):改写equals时遵守通用约定
- 解决Eclipse快捷键被其他软件占用
- Java 中类和方法修饰符
- Java基础知识强化14:Java死亡竞赛题目解析
- eclipse新建android项目后,不会自动生成activity,或者出现This Android SDK requires Android Developer Toolkit version
- java foreach循环中调用remove 抛出java.util.ConcurrentModificationException
- Spring笔记――12.访问资源
- java synchronized详解
- 两个栈实现一个队列以及两个队列实现一个栈(Java)
- Java多线程
- Struts2 part 1:快速入门
- java获取整数小数
- 学习日志---二叉树概念与遍历(递归)