动态规划——字符串的交错组成

来源:互联网 发布:国际淘宝怎么开 编辑:程序博客网 时间:2024/06/04 20:12

dp[i][j]的值代表aim[0...i+j-1]能否被str1[0...i-1]和str2[0...j-1]交错组成。

public static boolean crossString(String s1,String s2,String aim){if((s1.length()+s2.length())!=aim.length() || s1==null || s2==null || aim==null)return false;int M=s1.length();int N=s2.length();char[] ch1=s1.toCharArray();char[] ch2=s2.toCharArray();char[] a=aim.toCharArray();boolean[][] dp = new boolean[M+1][N+1];dp[0][0]=true;for(int i=1;i<=M;i++){dp[i][0]=((ch1[i-1]==a[i-1]) && dp[i-1][0]);}for(int j=1;j<=N;j++){dp[0][j]=((ch2[j-1]==a[j-1]) && dp[0][j-1]);}for(int i=1;i<=M;i++){for(int j=1;j<=N;j++){dp[i][j]=((ch1[i-1]==a[i+j-1]) && dp[i-1][j])||((ch2[j-1]==a[i+j-1]) && dp[i][j-1]);}}return dp[M][N];}