87. Scramble String
2016-01-25 23:00
405 查看
此题可以用动态规划来做。
也可以递归
public boolean isScramble(String s1, String s2) { int n = s1.length(); boolean[][][] dp = new boolean [n+1]; //s1从i开始,s2从j开始,长度为k的子序列互为Scramble for(int i = n-1; i >= 0; i--) for(int j = n-1; j>=0; j--) for(int k = 1; k <= n-Math.max(i,j);k++) { if(s1.substring(i,i+k).equals(s2.substring(j,j+k))) dp[i][j][k] = true; else { for(int l = 1; l < k; l++) { if(dp[i][j][l] && dp[i+l][j+l][k-l] || dp[i][j+k-l][l] && dp[i+l][j][k-l]) { dp[i][j][k] = true; break; } } } } return dp[0][0] ; }
也可以递归
public boolean isScramble(String s1, String s2) { if(s1.equals(s2)) return true; int n = s1.length(); int[] letter = new int[26]; //判断s1、s2的字符是否一样 for(int i = 0;i < n;i++){ letter[s1.charAt(i)-'a']++; letter[s2.charAt(i)-'a']--; } for(int i = 0;i < 26;i++){ if(letter[i] != 0) return false; } for(int i = 1;i < n;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(n-i)) && isScramble(s1.substring(i), s2.substring(0,n-i))) return true; } return false; }
相关文章推荐
- 【JS学习笔记】 面向对象与原型
- 图解TCP-IP协议
- LVS-NAT配置
- 做为网址导航生存何在或转行
- 侧边栏滚动条
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- LeetCode 64. Minimum Path Sum
- vmware tools 安装
- Hadoop Shell命令
- 关于Android Studio出现Plugin is too old, please update to a more recent version....问题
- Spring依赖注入:注解注入总结
- 认识JS
- 让LwIP拥有PING其他设备的能力
- 92. Pow(x, n)
- POJ 1936(字符串匹配)
- Linux LVM(逻辑卷管理)
- JAVA 聊天窗口
- LeetCode 69. Sqrt(x)
- 【JS学习笔记】JS基础下:函数的讲解
- 标准库函数qsort排序