using System;
using System.Collections.Generic;
class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* longest common subsequence
* @param s1 string字符串 the string
* @param s2 string字符串 the string
* @return string字符串
*/
public string LCS (string s1, string s2) {
var dp = new int[s1.Length+1,s2.Length+1];
for(int i = 0; i <= s1.Length; i++){
dp[i,0] = 0;
}
for(int i = 0; i <= s2.Length; i++){
dp[0,i] = 0;
}
for(int i = 1; i <= s1.Length; i++){
for(int j = 1; j <= s2.Length; j++){
if(s1[i-1] == s2[j-1]){
dp[i,j] = dp[i - 1,j -1] + 1;
}
else if(dp[i - 1,j] >= dp[i,j-1]){
dp[i,j] = dp[i - 1,j];
}
else{
dp[i,j] = dp[i,j - 1];
}
}
}
var res = new List<char>();
for(int i = s1.Length, j = s2.Length; dp[i,j] > 0;){
if(s1[i-1] == s2[j - 1]){
res.Add(s1[i - 1]);
i--;
j--;
}
else if(dp[i,j] <= dp[i - 1,j]){
i--;
}
else{
j--;
}
}
res.Reverse();
return res.Count > 0 ? new string(res.ToArray()) : "-1";
}
}