这题明白思路就很好做了

公共子串计算

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String string1 = in.next();
        String string2 = in.next();
        // 确保string1为短字符串
        if (string1.length() > string2.length()) {
            String temp = string1;
            string1 = string2;
            string2 = temp;
        }

        char[] charArray1 = string1.toCharArray();
        char[] charArray2 = string2.toCharArray();
        int maxCount = 0;
        // 遍历短串
        for (int i = 0; i < charArray1.length; i++) {
            int maxNum = 0;
            // 遍历长串
            for (int k = 0; k < charArray2.length; k++) {
                char c1 = charArray1[i];
                char c2 = charArray2[k];
                if (c1 == c2) {
                    // 注意此处要每次置为1开始
                    int count = 1;
                    // 两个串从当前位置开始往后一直比较
                    int currentIndex1 = i;
                    int currentIndex2 = k;
                    while (true) {
                        // 注意索引越界,两个串只要有其中之一到了末尾,退出比较
                        if(currentIndex1 == charArray1.length - 1
                                || currentIndex2 == charArray2.length - 1){
                            break;
                        }

                        if (string1.charAt(++currentIndex1) == string2.charAt(++currentIndex2)) {
                            count++;
                        }else {
                            // 下个位置不相等了退出循环
                            break;
                        }
                    }
                    // 该层每次都会有一个最大值,交换到外部
                    if (count > maxNum){
                        maxNum = count;
                    }

                }
            }
            // 上面的内层for循环每次会出来一个最大值,因此需置换到最外层
            // 如果是比之前相等的串长度大,替换
            if (maxNum > maxCount){
                maxCount = maxNum;
            }
        }

        System.out.println(maxCount);
    }
}

全部评论

相关推荐

有了offer来还愿:学校不行,专业不行,学历不行,怎么找?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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