题解 | #最长公共子串#

最长公共子串

http://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac

import java.util.*;


public class Solution {
    /**
     * longest common substring
     * @param str1 string字符串 the string
     * @param str2 string字符串 the string
     * @return string字符串
     */
    public String LCS (String str1, String str2) {
        // write code here
        int[][] mat =  new int[str1.length() + 1][str2.length() + 1];
        int maxLen = 0;
        int lastIdx = 0;
        for(int i = 1; i < mat.length; i++) {
            for(int j = 1; j < mat[0].length; j++) {
                if(str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    mat[i][j] = mat[i - 1][j - 1] + 1;
                    if(mat[i][j] > maxLen) {
                        maxLen = mat[i][j];
                        lastIdx = i;
                    }
                } else {
                    mat[i][j] = 0;
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        for(int j = lastIdx - maxLen; j < lastIdx; j++) {
            sb.append(str1.charAt(j));
        }
        return sb.toString();
    }
}
全部评论

相关推荐

菜菜狗🐶:双非之光
找工作,你会甘心进小厂还...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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