日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

字符串的交错组成

發布時間:2025/4/5 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串的交错组成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

  給定三個字符串str1, str2和aim, 如果aim包含且僅包含str1和str2的所有字符,而且在aim中屬于str1的字符之間保持原來在str1中的順序,屬于str2的字符之間保持原來在str2中的順序,那么稱aim是str1和str2的交錯組成。實現一個函數,判斷aim是否是str1和str2的交錯組成。

舉例

  str1 = “AB”, str2 = “12”。那么”AB12”, “A1B2”, “A12B”, “1A2B”, “1AB2”等都是str1和str2的交錯組成。

基本思路

  假設str1的長度為N,str2的長度為M,生成(N+1)*(M+1)的dp矩陣,為什么是N+1,M+1,因為我們需要在字符串的開頭添加一個空字符的特殊情況,dp[i][j]的值代表aim[0…i+j-1]能否被str1[0…i-1]和str2[0…j-1]交錯組成,dp[i][j]的值計算如下:

矩陣的第一行表示能否只用str2[0…j-1]交錯組成aim[0…j-1],如果str2[0…j-1]等于aim[0…j-1],則令dp[0][j] = True,否則為False

矩陣的第一列同上,如果str1[0…i-1]等于aim[0…i-1],則令dp[i][0] = True,否則為False

矩陣的其余位置由以下情況決定:?
1)dp[i-1][j]代表aim[0…i+j-2]能否被str1[0…i-2]和str2[0…j-1]交錯組成,如果可以,那么如果再有str1[i-1]等于aim[i+j-1],說明str1[i-1]又可以作為交錯組成aim[0…i+j-1]的最后一個字符。令dp[i][j] = True

2)dp[i][j-1]代表aim[0…i+j-2]能否被str2[0…j-2]和str1[0…i-1]交錯組成,如果可以,那么如果再有str2[j-1]等于aim[i+j-1],說明str2[j-1]又可以作為交錯組成aim[0…i+j-1]的最后一個字符。令dp[i][j] = True

3)如果上述情況不滿足,令dp[i][j] = False

"""經典動態規劃方法"""def isCross(str1,str2,aim):if str1 == None or str2 == None or aim == None or len(aim)!=len(str1) + len(str2):return Falsedp = [[Flase for i in range(len(str1)+1)] for j in range(len(str2)+1)]dp[0][0] = Truefor i in range(1,len(str1)):if str1[i-1] != aim[i-1]:breakdp[i][0] = Truefor j in range(1,len(str2)):if str1[j-1]!=aim[j-1]:breakdp[0][j] = Truefor i in range(1,len(str1)):for j in range(1,len(str2)):if dp[i-1][j] == True and str1[i-1] == aim[i+j-1] or(dp[i][j-1] == True and str2[j-1]==aim[i+j-1]):dp[i][j] = Truereturn dp[-1][-1]

?

總結

以上是生活随笔為你收集整理的字符串的交错组成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。