1. 程式人生 > >求兩個公共字串的最長公共子串(C++)

求兩個公共字串的最長公共子串(C++)

思路:

1.按兩字串長度,兩層迴圈

2.每一次迴圈找出潛在的公共字串

(比較笨的方法,但比較好用,也很清楚,程式碼如下)

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
vector<int> findCommon(string line1, string line2) {
	int len1 = line1.length();
	int len2 = line2.length();
	int maxlen = 0;
	int start_in1 = 0;
	for (int i = 0; i < len1; i++) {
		for (int j = 0; j < len2; j++) {
			if (line1[i] == line2[j]) {
				int as = i; int bs = j;
				int  count = 1;
				while (as + 1 < len1&&bs + 1 < len2&&line1[++as] == line2[++bs])
					count++;
				if (count > maxlen) {
					maxlen = count;
					start_in1 = i;
				}
			}

		}
	}
	vector<int> ans;
	ans.push_back(maxlen);
	ans.push_back(start_in1);
	return ans;
}
int main() {
	string line1 = "abcdek";
	string line2 = "bcd";
	vector<int> out;
	out = findCommon(line1, line2);
	for (int i = out[1]; i < out[0] + out[1]; i++)
		cout << line1[i];
	cout << endl;
	system("pause");
}