LeetCode Interleaving String
2015-09-18 05:46
225 查看
原题链接在这里:https://leetcode.com/problems/interleaving-string/
这是一道DP题,用boolean数组dp维护历史数据,dp[i][j]表示长度为i的s1和长度为j的s2能否组成长度为 i+j 的s3.
递推式是若当前s3的最后一个char与s1的最后一个char相同,并且dp[i-1][j]为true, 那么dp[i][j]为true;
或者当前s3的最后一个char与s2的最后一个char相同,并且dp[i][j-1]为true, 那么dp[i][j]为true, 两者是 或 的关系。
初始化第一排时就是s2长度为0时,看s3和s1最后一个char若相同 并且
s1的前一个字符对应的dp是true, 那么返回就是true; 第一列同理。
Note: 1. dp的大小是 (len1+1) * (len2+1). dp[0][0] = true是s1,s2,s3长度都为0的情况。
2. for loop时 i 是 <= 而不是< len1.
3. 初始化第一行第一列时别忘了校验前一个dp的值, 如dp[i-][0].
4. 本题可以使用降维来做。
AC Java:
这是一道DP题,用boolean数组dp维护历史数据,dp[i][j]表示长度为i的s1和长度为j的s2能否组成长度为 i+j 的s3.
递推式是若当前s3的最后一个char与s1的最后一个char相同,并且dp[i-1][j]为true, 那么dp[i][j]为true;
或者当前s3的最后一个char与s2的最后一个char相同,并且dp[i][j-1]为true, 那么dp[i][j]为true, 两者是 或 的关系。
初始化第一排时就是s2长度为0时,看s3和s1最后一个char若相同 并且
s1的前一个字符对应的dp是true, 那么返回就是true; 第一列同理。
Note: 1. dp的大小是 (len1+1) * (len2+1). dp[0][0] = true是s1,s2,s3长度都为0的情况。
2. for loop时 i 是 <= 而不是< len1.
3. 初始化第一行第一列时别忘了校验前一个dp的值, 如dp[i-][0].
4. 本题可以使用降维来做。
AC Java:
public class Solution { public boolean isInterleave(String s1, String s2, String s3) { if(s3.length() != s1.length()+s2.length()){ return false; } int len1 = s1.length(); int len2 = s2.length(); boolean [][] dp = new boolean[len1+1][len2+1]; dp[0][0] = true; for(int i = 1; i<=len1; i++){ //error if(s1.charAt(i-1) == s3.charAt(i-1) && dp[i-1][0]){ //error dp[i][0] = true; } } for(int j = 1; j<=len2; j++){ if(s2.charAt(j-1) == s3.charAt(j-1) && dp[0][j-1]){ dp[0][j] = true; } } for(int i = 1; i<=len1; i++){ for(int j =1; j<=len2; j++){ char c = s3.charAt(i+j-1); if(c == s1.charAt(i-1) && dp[i-1][j]){ dp[i][j] = true; } if(c == s2.charAt(j-1) && dp[i][j-1]){ dp[i][j] = true; } } } return dp[len1][len2]; } }
相关文章推荐
- 中国天气网 天气预报API 国家气象局 根据城市名称抓取城市ID,XML格式、JSON格式、图片代码
- 土地利用数据库地图自动缩编软件--地图缩编
- *LeetCode-Integer to Roman
- 一起来算圆周率
- React with webpack - part 1
- Using Angular 1.x With ES6 and Webpack
- LeetCode Distinct Subsequences
- LeetCode Distinct Subsequences
- How to use USB 3G dongle/stick Huawei E169/E620/E800 ( Chip used Qualcomm e1750) in Linux (China and world)
- 纪念人工智能(AI)奠基60周年
- Contains Duplicate III
- Contains Duplicate III
- *LeetCode-Product of Array Except Self
- Count Complete Tree Nodes
- Android 游戏开发之SurfaceView的简单使用
- SpringJUnit4加载类目录下(src)和WEF-INF目录下的配置文件
- Perfect Squares
- eetCode] Basic Calculator & Basic Calculator II Basic Calculator
- *LeetCode-Populating Next Right Pointers in Each Node
- 关于如何做版本发布