全网最全面的华为OD机试真题汇总,100%原题题库,不需要开会员即可查看全部内容,更多考题请查看真题库。
真题库:https://www.yuque.com/codernav.com/od
题目:查找重复代码
时间限制: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”
解题思路:
比较出两个字符串的长短
使用双层for循环截取短字符串,并判断是否为长字符串的子串,并找出其中最长的。没有的话,输出空字符串。
代码实现一:
package com.codernav.demo.hwod.exam; import java.util.Scanner; /** * @title 查找重复代码 * @Description 小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码,。 * 重复代码查找方法:以字符串形式给定两行代码(字符串长度 1 < length <= 100,由英文字母、数字和空格组成),找出两行代码中的最长公共子串。 * @Author 开发者导航 * @website https://codernav.com * @date 2023/5/13 */ public class Main { 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); } }
代码实现二:
package com.codernav.demo.hwod.exam; import java.util.Scanner; /** * @title 查找重复代码 * @Description 小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码,。 * 重复代码查找方法:以字符串形式给定两行代码(字符串长度 1 < length <= 100,由英文字母、数字和空格组成),找出两行代码中的最长公共子串。 * @Author 开发者导航 * @website https://codernav.com * @date 2023/5/13 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str1 = sc.nextLine(); String str2 = sc.nextLine(); String result = ""; int start = 0; int end = 1; while (end <= str2.length()) { String subStr = str2.substring(start, end); if (str1.contains(subStr)) { result = subStr; } else { start++; } end++; } System.out.println(result); } }