zoukankan      html  css  js  c++  java
  • 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"));
        }
    
    }
  • 相关阅读:
    分享一个利用HTML5制作的海浪效果代码
    3人从小公寓创业,到世界最大引擎公司,Unity创始人谈14年...
    决策树--从原理到实现
    使用行为树(Behavior Tree)实现游戏AI
    FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别
    相遇3000亿美金之巅,阿里腾讯战力与血值几何?
    深入浅出聊Unity3D项目优化:从Draw Calls到GC
    Unity性能优化专题---腾讯牛人分享经验
    高通创始人复盘30年发展历程
    Gym
  • 原文地址:https://www.cnblogs.com/null00/p/5116732.html
Copyright © 2011-2022 走看看