动态规划——交叉字符串

来源:互联网 发布:液晶电视修理用编程器 编辑:程序博客网 时间:2024/05/18 15:30


参考资料:

http://blog.csdn.net/smallfish_love/article/details/52277838

参考答案:

http://www.jiuzhang.com/solution/interleaving-string

public class InterleavingString {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub}public boolean isInterleave(String s1, String s2, String s3){if(s1.length()+s2.length()!=s3.length())return false;boolean [][] interleaved= new boolean[s1.length()+1][s2.length()+1];//先确定取字符串的前0个字符的情况interleaved[0][0]=true;//s2取前0个字符的情况for(int i=1;i<=s1.length();i++){if(s1.charAt(i-1)==s3.charAt(i-1)&& interleaved[i-1][0])interleaved[i][0]=true;}//s1取前0个字符的情况for(int j=1;j<=s2.length();j++){if(s2.charAt(j-1)==s3.charAt(j-1)&& interleaved[0][j-1])interleaved[0][j]=true;}//剩下的情况for(int i=1;i<=s1.length();i++){for(int j=1;j<=s2.length();j++){//情况一:当前s3的字符与当前s1的字符相匹配,则必须要满足s1当前字符(不包括当前字符)之前的字符串已匹配上if((s3.charAt(i+j-1)==s1.charAt(i-1)&& interleaved[i-1][j])||//情况二:当前s3的字符与当前s2的字符相匹配,则必须要满足s2当前字符(不包括当前字符)之前的字符串已匹配上(s3.charAt(i+j-1)==s2.charAt(j-1)&& interleaved[i][j-1]))interleaved[i][j]=true;}}return interleaved[s1.length()][s2.length()];}}