題目描述:
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 這個題可以用動態規劃解決...