前言
题目:交叉字符串问题,给出三个字符串s1,s2,s3,判断s3是否可以由s1和s2两个字符串经过交叉组合而成,组合过程不能改变字符在s1,s2字符串中的原本顺序。例:
s1=”aabcc”
s2=”dbbca”
s3=”aadbbcbcac”或者s3=”aadbbbaccc”
给了两种s3的情况,第一种情况下答案是yes,第二种情况下答案是no,因为找不到任何一种s1和s2的交叉组合方式可以组合成s3。
解法思想
刚拿到这个题的时候,其实是不知道怎么做的。想想应该用动态规划,但其实一时也想不到怎么动规,找了些题解后,发现大多只有代码,很少具体分析,正好很久没做动规的题,干脆自己画个表格,写篇博客巩固一下。
大概思想如下:
1. 动态规划求解,构造一个长为 len2=s2.size()+1 l e n 2 = s 2. s i z e ( ) + 1 ,宽为 len1=s1.size()+1 l e n 1 = s 1. s i z e ( ) + 1 的 dp[][] d p [ ] [ ] 二维数组;
2. 设有 i,j i , j ,其中 i i 表示字符串 s1 s 1