Interleaving String

来源:互联网 发布:华为算法工程师好进吗 编辑:程序博客网 时间:2024/05/29 13:24

此题所犯的错误,参看leetcode。

重点在于如何定义[i][j]到底代表啥,之后,必须严格按照状态转移方程来写code。值得反复理解,反复做

public class Solution {

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