题解 | #最长公共子序列-II#

最长公共子序列-II

http://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11

dp

设f[i][j]为[0,i] [0,j]中能够成公共子序列的最大值
f[i][j] = max(f[i - 1][j],f[i][j - 1],f[i - 1][j - 1] + (s[i] == s[j]))
import java.util.*;


public class Solution {
    public String LCS (String s1, String s2) {
        int n = s1.length();
        int m = s2.length();
        int f[][] = new int[n + 10][m + 10];
        for(int i = 0;i < n;i++){
            for(int j = 0;j < m;j++){
                f[i + 1][j + 1] = Math.max(f[i + 1][j],f[i][j + 1]);
                if(s1.charAt(i) == s2.charAt(j)){
                    //System.out.println("in");
                    if(f[i + 1][j + 1] < f[i][j] + 1){
                        f[i + 1][j + 1] = f[i][j] + 1;
                    }
                }
            }
        }
        StringBuffer ret = new StringBuffer("");
        boolean ok = true;
        for(int i = n - 1,j = m - 1;f[i + 1][j + 1] >= 1;){
            if(s1.charAt(i) == s2.charAt(j)){
                ret.append(s1.charAt(i));
                i--;j--;
                ok = false;
            }else if(f[i + 1][j] < f[i][j + 1])i--;
            else j--;
        }
        if(ok)return "-1";
        return ret.reverse().toString();
    }
}
全部评论

相关推荐

06-10 23:36
已编辑
首都经济贸易大学 C++
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务