(演算法)交錯的字串

2021-09-07 02:46:21 字數 1247 閱讀 8323

給定三個字串a, b, c,判斷c是否由a和b交錯構成。交錯構成的意思是,對於字串c,可以將其每個字元標記為a類或b類,使得我a類的每個字元順序構成了a字串,b類的每個字元順序構成了b字串。如:對於a=」rabbit」 b=」mq」, 」rabmbitq」是由a和b交錯構成的,但」rabbqbitm」不是由a和b交錯構成。

【動態規劃】

假設dp[i][j]表示a的前i個字元和b的前j個字元是否能夠交錯構成c的前i+j個字元。

狀態轉移方程:

dp[i][j]=(dp[i-1][j] && a[i-1]==c[i+j-1]) || (dp[i][j-1] && b[j-1]==c[i+j-1])

含義:dp[i][j]取決於:

1、a的前i-1個字元和b的前j個字元交錯構成c的前i+j-1個字元,且a[i-1]==c[i+j-1]

2、a的前i個字元和b的前j-1個字元交錯構成c的前i+j-1個字元,且b[j-1]==c[i+j-1]

初始狀態:

dp[0][0]=0;

dp[i][0]=dp[i-1][0] && a[i-1]=c[i-1];   (1=dp[0][j]=dp[0][j-1] && b[j-1]=c[j-1];  (1=

#include #include 

using

namespace

std;

bool iscrossstring(const

string &c,const

string &a,const

string &b)

vector

bool> > dp(len_a+1,vector(len_b+1

)); dp[

0][0]=true

;

for(int i=1;i<=len_a;i++)

dp[i][

0]=dp[i-1][0] && (c[i-1]==a[i-1

]);

for(int i=1;i<=len_b;i++)

dp[0][i]=dp[0][i-1] && (c[i-1]==b[i-1

]);

for(int i=1;i<=len_a;i++)

}/*for(int i=0;i<=len_a;i++)

cout<*/

return

dp[len_a][len_b];

}int

main()

return0;

}

字串交錯組成

問題描述 對於三個字串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是否...