【华为OD机试真题2023 JAVA】查找重复代码

1,317 阅读1分钟

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里

查找重复代码

时间限制:1s 空间限制:32MB 限定语言:不限

题目描述:小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码。
重复代码查找方法:以字符串形式给定两行代码(字符串长度 1 < length <= 100,由英文字母、数字和空格组成),找出两行代码中的最长公共子串。
注: 如果不存在公共子串,返回空字符串

输入描述:
输入的参数text1, text2分别表示两行代码

输出描述:
输出任一最长公共子串

示例1
输入:
hello123world
hello123abc4
输出:
hello123
说明:
text1 = "hello123world", text2 = "hello123abc4", 最长的公共子串为 "hello123"

示例2
输入:
private_void_method
public_void_method
输出:
_void_method
说明:
text1 = "private_void_method", text2 = "public_void_method", 最长的公共子串为 "_void_method"

示例3
输入:
hiworld
hiweb
输出:
hiw
说明:
text1 = "hiworld", text2 = "hiweb", 最长的公共子串为 "hiw"

解题思路:

1. 比较出两个字符串的长短
2. 使用双层for循环截取短字符串,并判断是否为长字符串的子串,并找出其中最长的。没有的话,输出空字符串。

代码块

 
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
 
        String text1 = sc.nextLine();
        String text2 = sc.nextLine();
 
        String minStr = text1.length() <= text2.length() ? text1 : text2;
        String maxStr = minStr.equals(text1) ? text2 : text1;
        String resStr = "";
 
        for(int i=0; i<minStr.length()-1; i++){
            for(int j=i+1; j<=minStr.length(); j++){
                String temp = minStr.substring( i, j);
                if(maxStr.contains(temp) && temp.length() > resStr.length()){
                    resStr = temp;
                }
            }
        }
 
        System.out.println(resStr);
    }
 
}