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

最长公共子序列-II

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

import java.util.*;


public class Solution {
    /**
     * longest common subsequence
     * @param s1 string字符串 the string
     * @param s2 string字符串 the string
     * @return string字符串
     */
    public String LCS (String s1, String s2) {
        if(s1 ==null||s1.length()==0||s2==null||s2.length()==0){
            return "-1";
        }
        int len1 = s1.length();
        int len2 = s2.length();
        
        int[][] arr = new int[len1+1][len2+1];
        
        for(int i=0;i<len1+1;i++){
            for(int j=0;j<len2+1;j++){
                if(i==0||j==0){
                    arr[i][j]=0;
                }else if(s1.charAt(i-1)==s2.charAt(j-1)){
                    arr[i][j] = arr[i-1][j-1]+1;
                }else{
                    arr[i][j] = arr[i-1][j]>arr[i][j-1]?arr[i-1][j]:arr[i][j-1];
                }
            }
        }
        
        //找出一个最长的公共子序列
        StringBuilder sb = new StringBuilder();
        int s1L = len1, s2L = len2;
        while(s1L != 0 && s2L != 0){
            if (s1.charAt(s1L-1) == s2.charAt(s2L-1)){
                sb.append(s1.charAt(s1L - 1));
                s1L--;
                s2L--;
            }else{
                if (arr[s1L-1][s2L] > arr[s1L][s2L-1]){
                    s1L--;
                }else{
                    s2L--;
                }
            }
        }
        return sb.length() == 0?"-1":sb.reverse().toString();
        
    }
}
全部评论

相关推荐

06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
点赞 评论 收藏
分享
05-05 21:45
已编辑
广州大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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