【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;  
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM