【小米OJ-交叉队列】动态规划

        import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        String line;
        while (scan.hasNextLine()) {
            line = scan.nextLine().trim();
            System.out.println(Main.solution(line));
        }
    }
    private static  String solution(String line){
        String str[] = line.split(",");
        int len1 = str[0].length();
        int len2 = str[1].length();
        int len3 = str[2].length();

        if(len3!=len1+len2) return false+"";
        if(len1==0) return (len2==len3)+"";
        if(len2==0) return (len1==len3)+"";

        int dp[][]=new int[len1+1][len2+1];
        dp[0][0] = 1;

        for(int i=1;i<=len1;i++)///判断在len1范围内的第一个字符串状态如何,即是否存在第三个字符串中
            if(str[0].charAt(i-1)==str[2].charAt(i-1))
            dp[i][0] = dp[i-1][0];

        for(int i=1;i<=len2;i++)///判断在len2范围内的第二个字符串状态,即是否存在第三个字符串中
            if(str[1].charAt(i-1)==str[2].charAt(i-1))
                dp[0][i] = dp[0][i-1];

         for(int i=1;i<=len1;i++)
             for(int j=1;j<=len2;j++){
                 int k = i+j;
                 if(str[0].charAt(i-1)==str[2].charAt(k-1)&&dp[i-1][j]==1)
                     dp[i][j] = dp[i-1][j];
                 if(str[1].charAt(j-1)==str[2].charAt(k-1)&&dp[i][j-1]==1)
                     dp[i][j] = dp[i][j-1];
             }

         if(dp[len1][len2]==1) return true+"";
         return false+"";
    }
}

  

不忘初心,方得始终。只有走过弯路,才更确信当初最想要的是什么。
原文地址:https://www.cnblogs.com/wszhu/p/12800254.html