//duynotes.blogspot.com
class Solution {
    public int longestCommonSubsequence(String text1, String text2) {
        int m = text1.length();
        int n = text2.length();
        
        int unique = 0;
        
        int [][] mat = new int[2][n+1];
        
        for (int i=0; i<=m; i++){
            unique = i&1;
            for (int j=0; j<=n; j++){
                
                if (j==0 || i ==0){
                    mat[unique][j]=0;
                }
                else if (text1.charAt(i-1)==text2.charAt(j-1)){
                    mat[unique][j]=mat[1-unique][j-1]+1;
                }
                else{
                    mat[unique][j]=Math.max(mat[1-unique][j],mat[unique][j-1]);
                }
                
            }
        }
        
        return mat[unique][n];
        
    }
}