【Leetcode】Interleaving String

来源:互联网 发布:守望网络初始化失败 编辑:程序博客网 时间:2024/06/08 11:24

题目链接:
https://leetcode.com/problems/interleaving-string/

题目:
Given s1, s2, s3, 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.

思路:
1,DP,dp[i][2]表示s3从0~i若能表示为s1到s2的部分交叉字符串,则记录s1或s2对应的下标。

2,DP,将两字符展开为二维数组。判断是否能由左上角走到右下角。

算法2:

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