Leetcode-interleaving-string

题目描述


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

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

When s3 ="aadbbcbcac", return true.

When s3 ="aadbbbaccc", return false.

判断s3是否是s1和s2交叉混编的~

运用动态规划解决:dp[i][j]表示s1的0~i位和s2的0~j位组成了s3.

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


发布了120 篇原创文章 · 获赞 25 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/yearningseeker/article/details/52433872