• LeetCode


    题目:

    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) 递归

    2) 动态规划,仍然沿用递归时的判断条件

    package dp;
    
    import java.util.Arrays;
    
    public class InterleavingString {
    
        public boolean isInterleave(String s1, String s2, String s3) {
            int len1 = s1.length();
            int len2 = s2.length();
            int len3 = s3.length();
            if (len3 != len1 + len2) return false;
            char[] c12 = (s1 + s2).toCharArray();
            Arrays.sort(c12);
            char[] c3 = s3.toCharArray();
            Arrays.sort(c3);
            if (!isEqual(c12, c3, len3)) return false;
            return interleave(s1, s2, s3, len1, len2, len3, 0, 0, 0);
        }
        
        private boolean interleave(String s1, String s2, String s3, int len1, int len2, int len3, int i, int j, int k) {
            if (i == len1 && j == len2 && k == len3) return true;
            boolean flag = false;
            if (i < len1 && s1.charAt(i) == s3.charAt(k))
                flag = flag || interleave(s1, s2, s3, len1, len2, len3, i + 1, j, k + 1);
            if (j < len2 && s2.charAt(j) == s3.charAt(k))
                flag = flag || interleave(s1, s2, s3, len1, len2, len3, i, j + 1, k + 1);
            return flag;
        }
        
        private boolean isEqual(char[] c0, char[] c1, int n) {
            for (int i = 0; i < n; ++i) {
                if (c0[i] != c1[i])
                    return false;
            }
            return true;
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            InterleavingString i = new InterleavingString();
            System.out.println(i.isInterleave("a", "b", "ab"));
            System.out.println(i.isInterleave("aabcc", "dbbca", "aadbbcbcac"));
            System.out.println(i.isInterleave("aabcc", "dbbca", "aadbbbaccc"));
        }
    
    }
    package dp;
    
    import java.util.Arrays;
    
    public class InterleavingString {
    
        public boolean isInterleave(String s1, String s2, String s3) {
            int len1 = s1.length();
            int len2 = s2.length();
            int len3 = s3.length();
            if (len3 != len1 + len2) return false;
            char[] c12 = (s1 + s2).toCharArray();
            Arrays.sort(c12);
            char[] c3 = s3.toCharArray();
            Arrays.sort(c3);
            if (!isEqual(c12, c3, len3)) return false;
    
            boolean[][] dp = new boolean[len1 + 1][len2 + 1];
            dp[0][0] = true;
            for (int i = 1; i <= len1; ++i) {
                dp[i][0] = (s1.charAt(i - 1) == s3.charAt(i - 1)) && dp[i - 1][0];
            }
            
            for (int i = 1; i <= len2; ++i) {
                dp[0][i] = (s2.charAt(i - 1) == s3.charAt(i - 1)) && dp[0][i - 1];
            }
            
            for (int i = 1; i <= len1; ++i) {
                for (int j = 1; j <= len2; ++j) {
                    dp[i][j] = (s1.charAt(i - 1) == s3.charAt(i + j - 1) && dp[i - 1][j]) || 
                            (s2.charAt(j - 1) == s3.charAt(i + j - 1) && dp[i][j - 1]);
                }
            }
            
            return dp[len1][len2];
        }
        
        private boolean isEqual(char[] c0, char[] c1, int n) {
            for (int i = 0; i < n; ++i) {
                if (c0[i] != c1[i])
                    return false;
            }
            return true;
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            InterleavingString i = new InterleavingString();
            System.out.println(i.isInterleave("a", "b", "ab"));
            System.out.println(i.isInterleave("aabcc", "dbbca", "aadbbcbcac"));
            System.out.println(i.isInterleave("aabcc", "dbbca", "aadbbbaccc"));
        }
    
    }
  • 相关阅读:
    .net百度编辑器的使用
    phpstudy远程连接mysql
    HDU-2389 Rain on your Parade
    HDU-2768 Cat vs. Dog
    HDU-1151 Air Raid
    HDU-1507 Uncle Tom's Inherited Land*
    HDU-1528/1962 Card Game Cheater
    HDU-3360 National Treasures
    HDU-2413 Against Mammoths
    HDU-1045 Fire Net
  • 原文地址:https://www.cnblogs.com/null00/p/5116732.html
Copyright © 2020-2023  润新知