zoukankan      html  css  js  c++  java
  • LeetCode-97.交错字符串

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

      示例 1:

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

      示例 2:

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

      

      注意题目,s3是由s1和s2交错组成,对比示例1和示例2可以知道,s1个字符的相对位置不能改变,s2也是。

      此题用动态规划解,动态规划题手动画出个二维数组会比较容易理解。

      

     1 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         //若s3长度不等于s1加上s2的长度,就直接返回false
     7         if(len1+len2!=len3)
     8             return false;
     9         //在此处判断是否有一方为空
    10         if(s1.equals(""))   return s2.equals(s3);
    11         if(s2.equals(""))   return s1.equals(s3);
    12         //建立dp数组,dp[i][j]代表s1的前i个数和s2的前j个数合并起来能否构成s3的前i+j个数
    13         boolean [][]dp=new boolean[len1+1][len2+1];
    14         //初始化dp数组
    15         dp[0][0]=true;
    16         for(int i=1;i<=len1;i++)
    17             dp[i][0]=s3.charAt(i-1)==s1.charAt(i-1)&&dp[i-1][0];
    18         for(int j=1;j<=len2;j++)
    19             dp[0][j]=s3.charAt(j-1)==s2.charAt(j-1)&&dp[0][j-1];
    20         
    21         for(int i=1;i<=len1;i++)
    22             for(int j=1;j<=len2;j++){
    23                 //构造二维数组后可得,dp[i][j]可由dp[i-1][j]添加s1的第i个数
    24                 //或由dp[i][j-1]添加s2的第j个数得到,此时两种情况,其中一个为true即可
    25                 //由此得到递推式
    26                 dp[i][j]=(dp[i][j-1]&&s2.charAt(j-1)==s3.charAt(i+j-1))
    27                     ||(dp[i-1][j]&&s1.charAt(i-1)==s3.charAt(i+j-1));
    28             }
    29         return dp[len1][len2];
    30     }
    31 }
  • 相关阅读:
    GitLab的基础使用-汉化配置
    GitLab的基础使用-数据备份与恢复
    Apache Hadoop集群扩容实战案例
    Hadoop 集群-完全分布式模式(Fully-Distributed Mode)
    HDFS参数调优总结
    网站压力测试 工具webbench
    2013年十大必知的大数据分析公司
    做电子商务网上开店应该读的书
    教你用大功率路由器覆盖3平方公里的WiFi广告
    中央推进城镇化建设 六行业分享25万亿蛋糕
  • 原文地址:https://www.cnblogs.com/lyh28/p/10642587.html
Copyright © 2011-2022 走看看