/**
 * 这个没有看别人的解题,自己独立写出来的,因为之前在书里看过相关的例子,但是不太一样,书里的例子只求最长的长度,所以在数组里存数字就行,一开始没看仔细,发现不对,想了一下,就是试着直接存字符,初始化首行首列为“”,然后比较字符,如果相等,当前位置赋值为[i-1][j-1]+当前字符,否则就从[i-1][j]或[i][j-1]取最长的。最后结果就在右下角。后来看别人的解题,很多还是存数字,然后再根据数字取字符,那样就麻烦多了!
 */
function LCS( s1 ,  s2 ) {
    // write code here
    if(typeof s1 != 'string' || typeof s2 != 'string'){
        return -1;
    }
    
    if(s1==''||s2==''){
        return -1;
    }
    const arr=[];
    let m=s1.length;
    let n=s2.length;

    for(let i=0;i<=m;i++){
        if(arr[i]===undefined){
            arr[i]=[];
        }
        for(let j=0;j<=n;j++){
            if(i==0 || j==0){
                arr[i][j]='';
                continue;
            }
            let c1=s1.charAt(i-1);
            let c2=s2.charAt(j-1)
            if(c1==c2){
                arr[i][j]=arr[i-1][j-1]+c1;
            }
            else{
                let l1=arr[i-1][j].length;
                let l2=arr[i][j-1].length;
                arr[i][j]=l1>=l2?arr[i-1][j]:arr[i][j-1];
            }
        }
    }
    
    return arr[m][n]==''?-1:arr[m][n];
}
module.exports = {
    LCS : LCS
};