leetcode97 交错字符串

举报
兔老大 发表于 2021/04/19 23:11:06 2021/04/19
【摘要】 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。 示例 1: 输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" 输出: true 示例 2: 输入: s1 = "aabcc", s2 = "dbbca", s3...

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。

示例 1:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
示例 2:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false

思路:之前做过,比较简单,dp[i][j]代表s1的i个和s2的j个能不能组成。

对于s3的i+j如何组成,只能:

1)i+j-1已经被i和j-1组成,s2[j]==s3[i+j]

比如:

s1:123 s2 456 s3:12453  6

2)i+j-1已经被i-1和j组成,s1[i]==s3[i+j]

比如:s1:126 s2 453 s3:12453  6

压缩空间后的表现还是不理想,搞不懂为什么。


  
  1. public class Solution {
  2. public boolean isInterleave(String s1, String s2, String s3) {
  3. int len1=s1.length();
  4. int len2=s2.length();
  5. int len3=s3.length();
  6. if (len3 != len1 + len2) {
  7. return false;
  8. }
  9. boolean dp[] = new boolean[s2.length() + 1];
  10. for (int i = 0; i <= len1; ++i) {
  11. for (int j = 0; j <= len2; ++j) {
  12. if (i == 0 && j == 0) {
  13. dp[j] = true;
  14. } else if (i == 0) {
  15. dp[j] = dp[j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1);
  16. } else if (j == 0) {
  17. dp[j] = dp[j] && s1.charAt(i - 1) == s3.charAt(i + j - 1);
  18. } else {
  19. dp[j] = (dp[j] && s1.charAt(i - 1) == s3.charAt(i + j - 1)) || (dp[j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1));
  20. }
  21. }
  22. }
  23. return dp[s2.length()];
  24. }
  25. }

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/103257370

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。