zoukankan      html  css  js  c++  java
  • leetcode刷题笔记九十七题 交错字符串

    leetcode刷题笔记九十七题 交错字符串

    源地址:97. 交错字符串

    问题描述:

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

    示例 1:

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

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

    /**
    本题类似于二维数组中按指定字母路径到达终点的路径问题,采用动态规划思想解决问题
    初始状态:dp(0)(0) = true
    转换方程:dp(i)(j) = (dp(i-1)(j) && s1(i-1) == s3(i+j-1))||(dp(i)(j-1) && s2(j-1) == s3(i+j-1))
    */
    object Solution {
        def isInterleave(s1: String, s2: String, s3: String): Boolean = {
            val s1Length = s1.length
            val s2Length = s2.length
            val s3Length = s3.length
    
            if(s1Length + s2Length != s3Length) return false
    
            val dp = Array.fill(s1Length+1, s2Length+1)(false)
            dp(0)(0) = true
    
            for(i <- 0 to s1Length){
                for(j <- 0 to s2Length){
                    val p = i + j - 1
                    if (i > 0)  dp(i)(j) = dp(i)(j) || (dp(i-1)(j) && s1(i-1) == s3(p))
                    if (j > 0)  dp(i)(j) = dp(i)(j) || (dp(i)(j-1) && s2(j-1) == s3(p))
                }
            }
            return dp(s1Length)(s2Length)
        }
    }
    
  • 相关阅读:
    HDOJ1004
    HDOJ1001
    HDOJ1000
    HDOJ1003
    HDOJ1005
    新手如何正确使用CLion之输出hello world
    hihoCoder#1032 : 最长回文子串
    P3805 【模版】manacher算法(manacher)
    P1198 [JSOI2008]最大数(单调栈)
    P1351 联合权值
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13411104.html
Copyright © 2011-2022 走看看