summaryrefslogtreecommitdiff
path: root/string/longestCommonSubsequence.cpp
blob: 109fe729e9e99118f7dffe3a30d2510f0fad25a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string lcss(const string& a, const string& b) {
	vector<vector<int>> m(sz(a) + 1, vector<int>(sz(b) + 1));
	for (int i = sz(a) - 1; i >= 0; i--) {
		for (int j = sz(b) - 1; j >= 0; j--) {
			if (a[i] == b[j]) m[i][j] = 1 + m[i+1][j+1];
			else m[i][j] = maj(m[i+1][j], m[i][j+1]);
	}} // Für die Länge: return m[0][0];
	string res;
	for (int j = 0, i = 0; j < sz(b) && i < sz(a);) {
		if (a[i] == b[j]) res += a[i++], j++;
		else if (m[i][j+1] > m[i+1][j]) j++;
		else i++;
	}
	return res;
}