题解 | #最长公共子串#

最长公共子串

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

注意和最长子序列的区别:最长子序列要求序列可以不连续,子串要求必须连续,中间不能间隔其它字符串。因此,把状态方程改一下即可,dp[i][j]只能来自dp[i-1][j-1],并且用一个max记录当前最长的公共子串。至于最后截取字符串的时候为什么要加个1呢?那是因为公共子串若存在,那么最小值为1,在最后加个1可以免去定义dp数组进行初始化全体赋1的操作。

public class Solution {
    public String LCS (String str1, String str2) {
        int len1 = str1.length();
        int len2 = str2.length();
        int dp[][] = new int [len1+1][len2+1];
        int max = 0;
        int end = 0;
        for(int i=1;i<=len1;++i){
            for(int j=1;j<=len2;++j){
                if(str1.charAt(i-1)==str2.charAt(j-1)){
                    dp[i][j] = dp[i-1][j-1]+1;
                    if(max<dp[i][j]) {
                        max = dp[i][j];
                        end = i-1;
                    }
                }
            }
        }
      String s= str1.substring(end-max+1,end+1);
      return s;
    }
}
全部评论

相关推荐

🎓学历背景:末二本+北邮硕想找段日常&nbsp;是简历写的有问题吗&nbsp;目前有家100-499的小厂过了,但大厂现在一个都没面过,官网投递一直在筛简历
牛客44176770...:我也28届,也是投了一个多月,四月底投的,面了6.7场,有个大厂,没结果应该是挂了,有三个小厂面试的很顺利,结果没下文了,互联网我恨你!这五月我时间都在投简历和改简历上了,结果没啥收获,算法也没刷,因为约的面试都没有算法索性就只看项目和八股唉,真的好累啊
我的简历长这样
点赞 评论 收藏
分享
牛客41077653...:想问一下华为池子是不是很大呀
点赞 评论 收藏
分享
想做乐观锁:都不用AI,咱们都古法编程吧,让节奏慢一点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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