日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符串的交错组成

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

題目

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

舉例

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

基本思路

  假設(shè)str1的長度為N,str2的長度為M,生成(N+1)*(M+1)的dp矩陣,為什么是N+1,M+1,因?yàn)槲覀冃枰谧址拈_頭添加一個空字符的特殊情況,dp[i][j]的值代表aim[0…i+j-1]能否被str1[0…i-1]和str2[0…j-1]交錯組成,dp[i][j]的值計(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

"""經(jīng)典動態(tài)規(guī)劃方法"""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]

?

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。