牛客網 Coincidence(最長公共子串LCS板題)
Description
給定兩個字串,輸出最長公共子串。
Input
abcd
cxbydz
Output
2
Solution
最長公共子串板題。狀態轉移方程如下:
#include <cstdio>
#include <iostream>
#include <cstring>
int dp[101][101];
using namespace std;
int main()
{
char S1[101], S2[101];
while (scanf("%s%s", S1, S2) != EOF)
{ //輸入
int L1 = strlen(S1);
int L2 = strlen(S2); //依次求得兩個字串的長度
for (int i = 0; i <= L1; i++)
dp[i][0] = 0;
for (int j = 0; j <= L2; j++)
dp[0][j] = 0; //初始值
//二重迴圈依次求得每個dp[i][j]值
for (int i = 1; i <= L1; i++)
{
for (int j = 1; j <= L2; j++)
{
//因為字串陣列下標從0開始,所以第i個字元位置為S1[i - 1], 若當前兩個字元不相等
if (S1[i - 1] != S2[j - 1])
//dp[i][j]為dp[i][j - 1] 和 dp[i - 1][j] 中較大的一個
dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
else
//若它們相等,則dp[i][j]比dp[i - 1][j - 1] 再加一
dp[i][j] = dp[i - 1][j - 1] + 1;
}
}
printf("%d\n", dp[L1][L2]); //輸出答案
}
return 0;
}
相關文章
- lCS(最長公共子串)
- 牛客題霸 [最長公共子串]C++題解/答案C++
- 動態規劃(最長公共子序列LCS)動態規劃
- LCS 演算法:Javascript 最長公共子序列演算法JavaScript
- 線性dp:最長公共子串
- 兩個字串的最長公共子串字串
- poj3080-kmp+列舉子串 求最長公共子串KMP
- 最長子串
- [演算法筆記]動態規劃之最長公共子串和最長公共子序列演算法筆記動態規劃
- 最長公共子串 二維陣列 Go實現陣列Go
- python 動態規劃(揹包問題和最長公共子串)Python動態規劃
- 最長公共子序列
- 演算法題:最長公共子序列演算法
- 最長公共子序列(JAVA)Java
- java 最長迴文子串Java
- poj 2774 求兩字串的最長公共子串 字尾陣列字串陣列
- Amazon面試題:尋找最長迴文子串面試題
- 【每日一題】無重複字元的最長子串每日一題字元
- java 實現 最長公共子序列Java
- 最長公共子序列求方案數
- 線性dp:最長公共子序列
- 最長公共子序列問題—動態規劃sdut動態規劃
- [題解]P1439 【模板】最長公共子序列
- 動態規劃經典問題----最長公共子序列動態規劃
- 無重複字元的最長子串字元
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 經典演算法題每日演練——最長公共子序列演算法
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- java無重複字元的最長子串Java字元
- 3 無重複字元的最長子串字元
- 演算法-兩最長迴文子串演算法
- LEECODE 5 求最長迴文子串
- 最長公共子序列的程式碼實現
- 每天一道演算法題:最長迴文子串演算法
- 今日面試題:最長迴文子串;及迴文分割分析面試題
- LeetCode題集-3 - 無重複字元的最長子串LeetCode字元