class Solution {
public:
/**
* @param A: A string
* @param B: A string
* @return: The length of longest common subsequence of A and B
*/
int longestCommonSubsequence(string &A, string &B) {
// write your code here
vector<vector<int>> lcs(A.size(),vector<int>(B.size()));
if(A==""&&B=="") return 0;
lcs[0][0]=A[0]==B[0]?1:0;
for(int j=1;j<B.size();j++){
if(A[0]==B[j]) lcs[0][j]=1;
else lcs[0][j]=lcs[0][j-1];
}
for(int i=1;i<A.size();i++){
if(A[i]==B[0]) lcs[i][0]=1;
else lcs[i][0]=lcs[i-1][0];
for(int j=1;j<B.size();j++){
if(A[i]==B[j]) lcs[i][j]=lcs[i-1][j-1]+1;
else lcs[i][j]=max(lcs[i-1][j],lcs[i][j-1]);
}
}
return lcs[A.size()-1][B.size()-1];
}
};