题目描述

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

输入描述

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

输出描述

输出任一最长公共子串

示例:

输入hello123world
hello123abc4
输出hello123
说明
输入hiworld
hiweb
输出hiw
说明

Python算法源码


def get_result(str1, str2):
    n = len(str1)
    m = len(str2)

    dp = [[0] * (m + 1) for _ in range(n + 1)]
  
    max_length = 0
    ans = ""

    for i in range(1, n + 1):
        for j in range(1, m + 1):
            if str1[i - 1] == str2[j - 1]:
                dp[i][j] = dp[i - 1][j - 1] + 1

                if dp[i][j] > max_length:
                    max_length = dp[i][j]
                    ans = str1[i - max_length:i]
            else:
                dp[i][j] = 0

    return ans

if __name__ == "__main__":
    # 输入两个字符串
    str1 = input()
    str2 = input()
  
    print(get_result(str1, str2))

Java算法源码


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
 
    String str1 = sc.nextLine();
    String str2 = sc.nextLine();
 
    System.out.println(getResult(str1, str2));
  }
 
  public static String getResult(String str1, String str2) {
    int n = str1.length();
    int m = str2.length();
 
    int[][] dp = new int[n + 1][m + 1];
 
    int max = 0;
    String ans = "";
 
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
          dp[i][j] = dp[i - 1][j - 1] + 1;
 
          if (dp[i][j] > max) {
            max = dp[i][j];
            ans = str1.substring(i - max, i);
          }
        } else {
          dp[i][j] = 0;
        }
      }
    }
 
    return ans;
  }
}
最后修改:2024 年 05 月 02 日
如果觉得我的文章对你有用,请随意赞赏