问题 A: 求最长公共子串(串)
时间限制: 1 Sec 内存限制: 128 MB
提交: 69 解决: 40
[提交][状态][讨论版][命题人:外部导入]
题目描述
求采用顺序结构存储的串s和串t的一个最长公共子串,若没有则输出false,若最长的有多个则输出最先出现的那一串。
输入
输入两个字符串
输出
输出公共子串
样例输入
abcdef adbcef
样例输出
bc
#include<iostream>
#include<string>
using namespace std;
int main() {
string a, b;
while (cin >> a >> b) {
int num = 0, index, dp[110][110] = { 0 };//dp:串a前i位和串b前j位最大子串长度
a = " " + a, b = " " + b;//下标从1方便
for (int i = 1; i < a.length(); i++) {
for (int j = 1; j < b.length(); j++) {
if (a[i] == b[j]) dp[i][j] = dp[i - 1][j - 1] + 1;
if (dp[i][j] > num) { num = dp[i][j]; index = i - dp[i][j] + 1; }
}
}
if (num == 0) cout << "false" << endl;
else cout << a.substr(index, num) << endl;
}
return 0;
}