题解 | #查找两个字符串a,b中的最长公共子串#

查找两个字符串a,b中的最长公共子串

http://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

思路:在一位牛油那里得到启发,并做了相应精简。
1.由于当最长公共子串不唯一时,需要输出较短字符串的出现的第一个最长公共子串。因此需要先判断除最短字符串。
2.对最短字符串做双重for循环,若i与j之间的子串在较长字符串中存在,并且长度大于max。记录下当前的i与j。
3.循环结束,输出较短字符串在i与j之间的子串。

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str1=in.next();
            String str2=in.next();
            //找出较短子串
            if(str1.length()>str2.length()){
                String tmp=str2;
                str2=str1;
                str1=tmp;
            }
            int max=0;//记录最大公共子串长度
            int m=0;//记录最大公共子串的左边界
            int n=0;//记录最大公共子串的右边界
            for(int i=0;i<str1.length();i++){
                for(int j=i+1;j<=str1.length();j++){
                    if(str2.contains(str1.substring(i,j)) && j-i>max){
                        max=j-i;
                        m=i;n=j;
                    }
                }
            }
            System.out.println(str1.substring(m,n));
        }
    }
全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务