思路:

大概思想如下:
1. 动态规划求解,构造dp[][] 二维数组;
2. 设dp[i][j], i 为 第一个字符串的第i个字母;j 为 第二个字符串的第j个字母  
3. dp[i][j] 如果为 1 ,表示 s1[i] 等于 s3[i+j] 且 dp[i−1][j] 等于 1,同理s2
4. 简单的说 dp[i][j] 为 1 就表示这个点可达,以 dp[0][0] 为起点, dp[len1][len2] 为终点,dp数组中值为 1 的点为路径,向下走表示取 s1 的字符,向右走表示取  s2 的字符。这样就将抽象的字符组合转化成了更好理解的二维数组来表示;
5. 最优子结构即为: s1,s2 的 i,j 点字符之前的字符能否交叉组合成字符串 s3 的前 i+j 个字符,转换到二维数组即为,i,j 点左侧点和上方的点是否可达。

    private static String solution(String line) {
String[] strs = line.split(",");
int len0 = strs[0].length();
int len1 = strs[1].length();
int len2 = strs[2].length();
if (len0 + len1 != len2)
return false + ""; int dp[][] = new int[len0 + 1][len1 + 1];
// init
dp[0][0] = 1;
for (int i = 1; i <= len0; i++) {
if (strs[0].charAt(i - 1) == strs[2].charAt(i - 1))
dp[i][0] = dp[i - 1][0];
else
break;
} for (int i = 1; i <= len1; i++) {
if (strs[1].charAt(i - 1) == strs[2].charAt(i - 1))
dp[0][i] = dp[0][i - 1];
else
break;
}
for (int i = 1; i <= len0; i++) {
for (int j = 1; j <= len1; j++) {
int k = i + j;
if (strs[0].charAt(i - 1) == strs[2].charAt(k - 1) && dp[i - 1][j] == 1)
dp[i][j] = 1;
if (strs[1].charAt(j - 1) == strs[2].charAt(k - 1) && dp[i][j - 1] == 1)
dp[i][j] = 1;
}
}
if (dp[len0][len1] == 1)
return true + "";
return false + "";
}

最新文章

  1. Kotlin的android扩展:对findViewById说再见(KAD 04)
  2. [BS-11] 关于RGB/ARGB颜色相关知识
  3. DG - 开启Active Data Guard
  4. ios app 解决微信扫二维码不能跳转问题
  5. (medium)LeetCode 220.Contains Duplicate III
  6. Scrum之Sprint会议
  7. [King.yue]Grid列选中JS控制按钮状态
  8. PHP第四章数组2
  9. MsSql省市联动表
  10. hdu_5969_最大的位或(贪心)
  11. vi join
  12. CF #Manthan, Codefest 16 C. Spy Syndrome 2 Trie
  13. JSP中的隐含对象
  14. win7、centos7 双系统安装总结
  15. [转帖]召冠总的 Oracle常用的性能诊断语句. --保存学习备查
  16. [IOI2018]会议——分治+线段树
  17. POJ 2762 Going from u to v or from v to u?- Tarjan
  18. tiff和geotiff格式分析
  19. Logstash写入MongoDB数据库
  20. Python selenium chrome 环境配置

热门文章

  1. 解析 Qt 字库移植并能显示中文 (下篇)
  2. 所有W版本的函数都在wchar.h文件(_wfopen),和stdlib.h文件(wcstombs),和stdio.h文件(vwprintf)
  3. Delphi&amp;C#代码模拟“显示桌面”的功能(使用CreateOleObject(&#39;Shell.Application&#39;))
  4. [java代码库]-简易计算器(第二种)
  5. XP下安装ubuntu
  6. DataVeryLite入门教程(一) 配置篇
  7. C#中await/async闲说
  8. OpenProj打开不了或者提示”Failed to load Java VM Library”的错误的解决方案
  9. 确认过眼神,看清HTTP协议
  10. Spring事务原理一探