码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode-Interleaving String

时间:2015-08-28 19:53:37      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

Given s1s2s3, find whether s3 is formed by the interleaving of s1 and s2.

For example,
Given:
s1 = "aabcc",
s2 = "dbbca",

When s3 = "aadbbcbcac", return true.
When s3 = "aadbbbaccc", return false.


又是一个关于字符串的动态规划题,Distinct SubsequencesEdit Distance都差不多,肯定回溯法是可以解出来的,但是肯定时间复杂度比较高。这时候想起来动态规划算法。分析基本跟上述两个问题的方式是一样的。

还是看住最后一个字符s1[j], s2[i]与s3[i+j-1]之间的关系,代码见下:

    public boolean isInterleave(String s1, String s2, String s3) {
    	if (s1.length() + s2.length() != s3.length()) return false;
        boolean[][] dp = new boolean[s2.length()+1][s1.length()+1];
        
        dp[0][0] = true;
        for (int i = 1; i < dp[0].length; i++) {
        	dp[0][i] = s1.charAt(i-1) == s3.charAt(i-1) && dp[0][i-1];
        }
        
        for (int i = 1; i < dp.length; i++) {
        	dp[i][0] = s2.charAt(i-1) == s3.charAt(i-1) && dp[i-1][0];
        }
        for (int i = 1; i < dp.length; i++) {
        	for (int j = 1; j < dp[i].length; j++) {
        		dp[i][j] = (s3.charAt(i+j-1) == s1.charAt(j-1) && dp[i][j-1]) 
        				|| (s3.charAt(i+j-1) == s2.charAt(i-1) && dp[i-1][j]);
        	}
        }
        return dp[s2.length()][s1.length()];
    }



版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode-Interleaving String

标签:

原文地址:http://blog.csdn.net/my_jobs/article/details/48055585

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!