有类型返回的函数,最后一定要有一个类型返回!!!debug的时候:
rrunwuxaulkstbzexiudqauuilzqrvbmktickvpxvkqoykrexetigyzvzvjmdokvhvlpliliwqhccfanlzxfvprzadnegyrbchuy mecdkuxaudbeesyuuiquhaieiiylrknlqphcjvpwjxqdlzrefnpezcselvkmdogvhkkqihroievkqffnluzfijrzenclyytbcdmo
的最长公共子序列的长度居然是100???发现他们最后一次匹配的时候第一个串的下标已经到99了,但是函数的返回值显示是100????最后发现是find函数进不去循环,但是最后又没有return,所以出现了这个奇怪的情况。
// 出错的代码部分
int find(int x, int y){
int tmp = 0;
for(int i = x; i < l1; i ++) {
// cout << "i - x: " << i - x << endl;
if(s1[i] == s2[y + (i - x)]) {
// cout << s1[i] << " " << s2[y + (i - x)]<< endl;
// if(tmp == 100) {
// cout << "s11 && s12:" << i << " " << y + (i - x) << endl;
// }
tmp ++;
}
else {
return tmp;
}
}
// return tmp;
}
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string s1, s2;
int l1;
int l2;
int find(int x, int y){
int tmp = 0;
for(int i = x; i < l1; i ++) {
// cout << "i - x: " << i - x << endl;
if(s1[i] == s2[y + (i - x)]) {
// cout << s1[i] << " " << s2[y + (i - x)]<< endl;
// if(tmp == 100) {
// cout << "s11 && s12:" << i << " " << y + (i - x) << endl;
// }
tmp ++;
}
else {
return tmp;
}
}
return tmp;
}
int main()
{
cin >> s1 >> s2;
// cout << s1 << " " << s2 << endl;
l1 = s1.size();
l2 = s2.size();
// cout << l1 << " " << l2 << endl;
int p1 = 0, p2 = 0;
int max_l = 0;
for (int i = 0; i < l1; i ++ ) {
for (int j = 0; j < l2; j ++ ) {
if(s1[i] == s2[j]) {
// cout << "enter: " << s1[i] << " " << s2[j] << endl;
int l = find(i, j);
// if(l==100) {
// cout << "i & j: " << i << " " << j << endl;
// cout << s1[i] << " " << s2[j] << endl;
// cout << "l: " <<l << endl;
// }
if(l >= max_l) {
p1 = i;
p2 = i + l;
max_l = l;
// cout << p1 << " " << p2 << endl;
}
}
}
}
cout << max_l << endl;
string res = "";
for (int i = p1; i < p2; i ++ ) res += s1[i];
cout << res << endl;
return 0;
}