summaryrefslogtreecommitdiff
path: root/content/string/longestCommonSubsequence.cpp
blob: 6c9ea44ed2793f7a31b5f85b5b6d02b4ab0cd47f (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] = max(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;
}