1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ?LeetCode刷題實戰(zhàn)97:交錯字符串

        共 537字,需瀏覽 2分鐘

         ·

        2020-11-18 01:44

        算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

        今天和大家聊的問題叫做?交錯字符串,我們先來看題面:

        https://leetcode-cn.com/problems/interleaving-string/

        Given strings s1, s2, and s3, find whether s3 is formed by an interleaving of s1 and s2.


        An interleaving of two strings s and t is a configuration where they are divided into non-empty substrings such that:


        s = s1 + s2 + ... + sn

        t = t1 + t2 + ... + tm

        |n - m| <= 1

        The interleaving is s1 + t1 + s2 + t2 + s3 + t3 + ... or t1 + s1 + t2 + s2 + t3 + s3 + ...

        Note: a + b is the concatenation of strings a and b.

        題意


        給定三個字符串 s1、s2、s3,請你幫忙驗證 s3 是否是由 s1 和 s2 交錯 組成的。

        兩個字符串 s 和 t 交錯 的定義與過程如下,其中每個字符串都會被分割成若干 非空 子字符串:

        s = s1 + s2 + ... + sn
        t = t1 + t2 + ... + tm
        |n - m| <= 1
        交錯 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...
        提示:a + b 意味著字符串 a 和 b 連接。

        樣例


        解題

        https://my.oschina.net/u/3640932/blog/4405751


        動態(tài)規(guī)劃

        這個問題我們可以轉(zhuǎn)換為求證,s3 是否能夠從向下選取 s1,向右選取 s2,這樣的形式,去求得是否存在 s3 這條路徑。

        狀態(tài)定義

        設(shè)?dp[i][j]?表示 s1 前 i 個字符和 s2 前 j 個字符能夠拼接成 s3(i+j) 個字符,也就是當(dāng)前路徑存在。

        狀態(tài)轉(zhuǎn)移方程

        如果 s1 的第 i 個元素和 s3 的第 i+j 個元素相等,那么?dp[i][j]?是否成立,則需要看?dp[i-1][j]?是否成立,也就是這里需要看 s1 的前 i-1 個元素和 s2 的前 j 個元素能否拼接成 s3 的前 i+j-1 個元素。
        同樣的 如果 s2 的第 j 個元素和 s3 的第 i+j 個元素相等,此時?dp[i][j]?是否成立,則需要看?dp[i][j-1]?是否成立,也就是需要看 s2 的前 i 個元素和 s2 的前 j-1 個元素是否能夠拼接成 s3 的前 i+j-1 個元素。
        那么最終的狀態(tài)轉(zhuǎn)移方程為:
        dp[i][j] = (dp[i-1][j] and s3[i+j-1]=s1[i-1]) or (dp[i][j-1] and s3[i+j-1]=s2[j-1])

        狀態(tài)初始化

        • dp[0][0] = True

        • 如果 j = 0, dp[i][0] 是否成立,取決于 dp[i-1][0] 以及 s1 的第 i 個字符是否等于 s3 的第 i 個字符;

        • 如果 i = 0, dp[0][j] 是否成立,取決于 dp[0][j-1] 以及 s3 的第 i 個字符與 s2 的第 i 個字符是否相等。

        class Solution:
        ????def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
        ????????# 先處理特殊情況,如果 s1 和 s2 的長度和不等于 s3 的長度,則返回 False。因為無法交錯拼接
        ????????if?len(s1) + len(s2) != len(s3):
        ????????????return?False
        ????????
        ????????m?= len(s1)
        ????????n = len(s2)

        ????????# 狀態(tài)定義
        ????????dp?= [[False] * (n+1) for?_ in range(m+1)]
        ????????# 初始化
        ????????dp[0][0] = True
        ????????for?i in range(1, m+1):
        ????????????dp[i][0] = dp[i-1][0] and?s3[i-1] == s1[i-1]
        ????????for?j?in range(1, n+1):
        ????????????dp[0][j] = dp[0][j-1] and?s3[j-1] == s2[j-1]

        ????????for?i in range(1, m+1):
        ????????????for?j?in range(1, n+1):
        ????????????????dp[i][j] = (dp[i-1][j] and?s3[i+j-1]==s1[i-1]) or?(dp[i][j-1] and?s3[i+j-1]==s2[j-1])

        ????????return?dp[-1][-1]


        好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力。


        上期推文:

        LeetCode50-80題匯總,速度收藏!
        LeetCode刷題實戰(zhàn)81:搜索旋轉(zhuǎn)排序數(shù)組 II
        LeetCode刷題實戰(zhàn)82:刪除排序鏈表中的重復(fù)元素 II
        LeetCode刷題實戰(zhàn)83:刪除排序鏈表中的重復(fù)元素
        LeetCode刷題實戰(zhàn)84:?柱狀圖中最大的矩形
        LeetCode刷題實戰(zhàn)85:最大矩形
        LeetCode刷題實戰(zhàn)86:分隔鏈表
        LeetCode刷題實戰(zhàn)87:擾亂字符串
        LeetCode刷題實戰(zhàn)88:合并兩個有序數(shù)組
        LeetCode刷題實戰(zhàn)89:格雷編碼
        LeetCode刷題實戰(zhàn)90:子集 II
        LeetCode刷題實戰(zhàn)91:解碼方法
        LeetCode刷題實戰(zhàn)92:反轉(zhuǎn)鏈表 II
        LeetCode刷題實戰(zhàn)93:復(fù)原IP地址
        LeetCode刷題實戰(zhàn)94:二叉樹的中序遍歷
        LeetCode刷題實戰(zhàn)95:不同的二叉搜索樹 II
        LeetCode刷題實戰(zhàn)96:不同的二叉搜索樹

        瀏覽 22
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天日日夜夜操 | 热99在线视频 | 欧美乱操视频 | jiZZ亚洲女人高潮大叫 | 杨玉环大尺度床戏做爰 | 成人深爱激情网 | 操Bxxxx| 天天曰天天干 | 五月天婷婷啪啪 | 成人性生活片 |