計蒜客 交錯字串

2021-08-20 20:25:43 字數 1017 閱讀 7229

題目描述:

aabd abdc aabdabdc

aabc  abad aabcbaad

方法分析:動態規劃。

思路:構造乙個大小為(s1len+1)*(s2len+1)的矩陣;

dp[i][j]的含義:s1的前i個字元能否和s2的前j個字元構成s3的前i+j個字元

1.初始化dp[0][0]=1(表示s3為空時,s3可以由s1和s2的空串構成);

2.如果s3的前i個字元可以由s1的前i個字元構成,則將dp[i][0]初始化為1,反之初始化為0;

3.如果s3的前j個字元可以由s2的前j個字元構成,則將

dp[0][j]初始化為1,反之初始化為 0;

4.對於其他位置(i,j),當s1[i-1]和s3[i+j-1]相等時dp[i][j]的值就取決於dp[i-1][j];

當s2[j-1]和s3[i+j-1]相等時dp[i][j]的值就取決於dp[i][j-1];

狀態轉移方程:dp[i][0]=dp[i-1][0]&&(s1[i-1]==s3[i-1]);(1<=i<=s1len&&j==0)

dp[0][j]=dp[0][j-1]&&(s2[j-1]==s3[j-1]);(1<=j<=s2len&&i==0)

dp[i][j]=(dp[i-1][j]&&(s1[i-1]==s3[i+j-1]))||(dp[i][j-1]&&(s2[j-1]==s3[i+j-1]));(1=#include #include #include #include #include #include #define maxn 500

using namespace std;

int dp[maxn][maxn];

int main()

for(int j=1;j<=b.length();j++)//初始化

for(int i=1;i<=a.length();i++)

}if(dp[a.length()][b.length()]!=0) cout<<"true"<

計蒜客 字串長度

時間限制1000ms 記憶體限制65536k 在右側我們給出了乙個已經基本完成的程式,讀入了乙個字串,呼叫了乙個叫str len的函式來計算這個字串的長度,並輸出。聰明的你應該已經發現了,這個叫str len的函式並沒有完成,在不修改函式原型的情況下,請完成str len函式,實現我們上述的功能吧。...

計蒜客 字串長度

字串長度 在右側我們給出了乙個已經基本完成的程式,讀入了乙個字串,呼叫了乙個叫str len的函式來計算這個字串的長度,並輸出。聰明的你應該已經發現了,這個叫str len的函式並沒有完成,在不修改函式原型的情況下,請完成str len函式,實現我們上述的功能吧。樣例輸入abcdefg 樣例輸出7 ...

LC97 交錯字串

給定三個字串 s1,s2,s3,驗證 s3 是否是由 s1 和 s2 交錯組成的。示例 1 輸入 s1 aabcc s2 dbbca s3 aadbbcbcac 輸出 true 示例 2 輸入 s1 aabcc s2 dbbca s3 aadbbbaccc 輸出 false 這個題可以用動態規劃解決...