文章
时间轴
标签
音乐室
友人帐
一刻时光
清单
留言板
相册
算法海洋
关于
Slcpの童话镇 🏰
写文章
1092. 最短公共超序列
困难
动态规划
原题链接
发布日期:
2023年03月28日
文章字数:
5.1k
阅读次数:
435
阅读时长:
0小时0分0秒
## 解题思路 - 找到str1和str2的最长公共子序列 - 把str1和str2独有的字符加入进来 ## 代码 ~~~java class Solution { public String shortestCommonSupersequence(String str1, String str2) { int L1 = str1.length(); int L2 = str2.length(); char[] c1 = str1.toCharArray(); char[] c2 = str2.toCharArray(); int[][] dp = new int[L1 + 1][L2 + 1]; for(int i = 1; i <= L1; i++) { for(int j = 1; j <= L2; j++) { if(c1[i - 1] == c2[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; } else { dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); } } } StringBuilder sbr = new StringBuilder(); int i = L1; int j = L2; while(i > 0 || j > 0) { if(i == 0) { sbr.append(c2[j - 1]); j--; } else if(j == 0) { sbr.append(c1[i - 1]); i--; } else { if(c1[i - 1] == c2[j - 1]) { sbr.append(c2[j - 1]); i--; j--; } else if(dp[i][j] == dp[i - 1][j]) { sbr.append(c1[i - 1]); i--; } else if(dp[i][j] == dp[i][j - 1]) { sbr.append(c2[j - 1]); j--; } } } return sbr.reverse().toString(); } } ~~~
您阅读这篇文章共耗时:
0小时16分34秒
文章链接:
https://www.slcp.top/article/read/1640605577944428546
版权声明:
本博客所有文章除特別声明外,均采用
CC BY 4.0
许可协议。转载请注明来源
Slcp
!
转载文章以及部分引用均为自己整理记录学习而用,若有侵权,请联系删除。
动态规划
评论
Valine
Gitalk
目录
搜索
首页
前进
后退
刷新
申请友链
在线联系