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

动态规划——字符串的交错组成_第1张图片

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];
	}


你可能感兴趣的:(动态规划)