题解 | #公共子串计算#

公共子串计算

http://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String ss1 = in.nextLine();
        String ss2 = in.nextLine();
        String s1 = ss1.length()<ss2.length() ? ss1:ss2;  // 短的字符串
        String s2 = ss1.length()<ss2.length() ? ss2:ss1;  // 长的字符串
        int n = 0;
        for(int i=0;i<s1.length();i++){              // 头指针从第一位开始递增
            for(int j=s1.length();j>i;j--){          // 尾指针从最后一位开始缩减
                if(s2.contains(s1.substring(i,j))){  // 第一次发现合集的长度一定是最大的
                    n = j-i>n ? j-i:n;               // 取每一次比较的最大值
                    break;                           // 已经是最大的,无需再进行后续的操作
                }
            }
        }
        System.out.println(n);
    }
}

全部评论
continue是结束了内循环,外循环还在跑。是不是应该把打印语句放内循环,然后return。
点赞 回复 分享
发布于 2022-05-22 10:11
你没考虑两个字符串一样长的问题,修改成一下就行 import java.util.*; public class Main { public static void main(String [] args) { Scanner sc = new Scanner(System.in); String s1 = sc.nextLine(); String s2 = sc.nextLine(); System.out.println(getPublicStr(s1, s2)); } public static int getPublicStr( String s1, String s2) { int count = 0; for (int i = 0; i < s1.length(); i++) { for (int j = s1.length(); j > i; j--) { if (s2.contains(s1.substring(i, j))) { count = Math.max(j - i, count); } } } return count; } }
点赞 回复 分享
发布于 2022-07-02 18:07
大佬大佬,如果测试ss1="a";ss2="h";测试结果是1,但是结果不应该是0吗?
点赞 回复 分享
发布于 2023-03-11 13:18 江西
注意,两个字符串长度为1且不相等时,比如 strA = 'c', strB= 'h'。这个时候会出现判断出错,导致输出结果为1。 实际上是因为当两个字符串相等的时候三目运算符会出错: let long = strA.length > strB.length ? strA : strB; let short = strA.length < strB.length ? strA : strB; 这样得到的 long == short,都为'c'或者'h',因为判断条件都不成立,既不大于也不小于,所以都跳过了第一个结果strA,转而等于strB。 最好的方法是老老实实区分开来,把strA.length== strB.length的情况也算进去。用if else if(strA.length>str.length){ long = strA short = strB }else{ long = strB short = strA }
点赞 回复 分享
发布于 2023-05-10 21:14 广东

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
65
10
分享
牛客网
牛客企业服务