首页 > 代码库 > 【java】求两个字符串的最长公共子串

【java】求两个字符串的最长公共子串

  这个是华为OJ上的一道题目。首先,如果我们用java写代码,华为OJ有以下三条规则需遵守,否则编译无法通过或者用例无法通过,规则如下:

(1)一定不可以有包名;(2)主类名只能为Main;(3)不可以输出与结果无关的信息。

  好了,按照以上规则,我们写出来的代码如下(此代码不是最优的,只是用来记录华为OJ上java代码的书写规则):

import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        Main mainObj = new Main();        int len = mainObj.getCommonStrLength(sc.next(),sc.next());        System.out.println(len);    }        int getCommonStrLength(String str1, String str2) {             str1 = str1.toLowerCase();              str2 = str2.toLowerCase();              int len1 = str1.length();              int len2 = str2.length();              String min = null;              String max = null;              String target = null;            min = len1 <= len2 ? str1 : str2;            max = len1 >  len2 ? str1 : str2;            //最外层:min子串的长度,从最大长度开始            for (int i = min.length(); i >= 1; i--) {                //遍历长度为i的min子串,从0开始                for (int j = 0; j <= min.length() - i; j++) {                      target = min.substring(j, j + i);                      //遍历长度为i的max子串,判断是否与target子串相同,从0开始                    for (int k = 0; k <= max.length() - i; k++) {                          if (max.substring(k,k + i).equals(target)) {                              return i;                          }                    }                }            }              return 0;      }}

 

【java】求两个字符串的最长公共子串