字串的交錯組成

2021-07-04 23:46:19 字數 1822 閱讀 6082

【題 目】

給定三個字串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的⻓長度為m,str2的⻓長度為n,經典動態規劃的⽅方法可以達到時間複雜度o(m*n),額

外空間複雜度o(m*n)。如果結合空間壓縮的技巧可以把額外空間複雜度減⾄至o(min)。

先來介紹經典動態規劃的⽅方法。⾸首先aim如果是str1和str2的交錯組成,aim的⻓長度⼀一定是m

+n,否則直接返回false。然後⽣生成⼤大⼩小為(m+1)*(n+1)布林型別的矩陣dp,dp[i][j]的值代表

aim[0..i+j-1]能否被str1[0..i-1]和str2[0..j-1]交錯組成。計算dp矩陣的時候,是從左到右再

從上到下的計算的,dp[m][n]也就是dp矩陣中最右下⾓角的值,就表⽰示aim整體能否被str1整

體和str2整體交錯組成,也就是最終結果。具體說明dp矩陣每個位置的值是如何計算。

1,dp[0][0]=true。aim為空串時,當然可以被str1為空串和str2為空串交錯組成。

2,矩陣dp第⼀一列即dp[0..m-1][0]。dp[i][0]表⽰示aim[0..i-1]能否只被str1[0..i-1]交錯組成。

如果aim[0..i-1]等於str1[0..i-1],則令dp[i][0]=true,否則令dp[i][0]=false。

3,矩陣dp第⼀一⾏行即dp[0][0..n-1]。dp[0][j]表⽰示aim[0..j-1]能否只被str2[0..j-1]交錯組成。

如果aim[0..j-1]等於str1[0..j-1],則令dp[i][0]=true,否則令dp[i][0]=false。

4,對於其他位置(i,j),dp[i][j]的值由下⾯面的情況決定。

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]能否被str1[0..i-1]和str2[0..j-2]交錯組成,如果可以,

那麼如果再有str2[j-1]等於aim[i+j-1],說明str1[j-1]⼜又可以作為交錯組成aim[0..i+j-1]的最

後⼀乙個字元。令dp[i][j]=true。

3)如果情況1)和情況2)都不滿⾜足,令dp[i][j]=false。

#includeusing namespace std;

class mixture

else

dp[0] = true;

for(int i = 1;i<=shorts.size();i++)

dp[i] = true;

}for (int i = 1; i <= longs.size(); i++) else }}

return dp[shorts.size()];

}};

字串交錯組成

問題描述 對於三個字串a,b,c。我們稱c由a和b交錯組成當且僅當c包含且僅包含a,b中所有字元,且對應的順序不改變。請編寫乙個高效演算法,判斷c串是否由a和b交錯組成。給定三個字串a,b和c,及他們的長度。請返回乙個bool值,代表c是否由a和b交錯組成。保證三個串的長度均小於等於100。測試樣例...

字串交錯組成

對於三個字串a,b,c。我們稱c由a和b交錯組成當且僅當c包含且僅包含a,b中所有字元,且對應的順序不改變。請編寫乙個高效演算法,判斷c串是否由a和b交錯組成。給定三個字串a,b和c,及他們的長度。請返回乙個bool值,代表c是否由a和b交錯組成。保證三個串的長度均小於等於100。測試樣例 abc ...

字串的交錯組成

題目 給定三個字串str1,str2和aim,如果aim包含且僅包含str1和str2的所有字元,而且在aim中屬於str1的字元之間保持原來在str1中的順序,屬於str2的字元之間保持原來在str2中的順序,那麼稱aim是str1和str2的交錯組成。實現乙個函式,判斷aim是否是str1和st...