题解 | #公共子串计算#

公共子串计算

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 广东

相关推荐

10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
65 10 评论
分享
牛客网
牛客企业服务