【Java】從兩個字符串中找出最長的相同字符序列


 1 /*  
 2 從兩個字符串中找出最長的相同字符序列
 3 */
 4 class  Ex_4_11
 5 {
 6     public static void main(String[] args) 
 7     {
 8         String str1 = "abchelHelouyouarmabc";
 9         String str2 = "You are my Hello abcd,hello";
10         int str1s , substr1len;
11         String substr1;
12         boolean isSearched=false;
13         int l = str1.length();
14         int n = 0;
15         
16         while (l>=0)
17         {
18             n = n+l;
19             l--;
20         } // 累加,計算出str1字符串一共有n種可能的子字符串組合
21         
22         //從這n種中尋找可能的字符串並截取出來與str2比較
23         Search:
24             for (substr1len=str1.length() ; substr1len >= 1 ; substr1len-- )
25             {
26                 for (str1s=0 ; str1s <=(str1.length() - substr1len) ; str1s++ )
27                 {
28                     substr1 = str1.substring(str1s, (str1s+substr1len));
29                     //System.out.print(substr1+ " ");
30                     if (str2.indexOf(substr1)>-1)
31                     {
32                         System.out.println("The max equals substring is :" + substr1);
33                         isSearched = true;
34                     }
35                 }
36                 if (isSearched) break;
37             }
38 
39 //        System.out.println(n);
40     }
41 }
42 
43 /*
44 算法思路:
45 (1)計算可能的子字符串的數量;
46 (2)子串的長度substrlen范圍是1至str1.length(),而子串在str1中的起始位置0至(str1.length() - substrlen)。
47         那么就以子串的長度作為外層循環,子串在str1中的起始位置作為內層循環,開始遍歷所有可能的子串。因為該題要求是求出最長的相同子字符串,
48         所以最先從最長的子串長度開始遍歷,即substrlen = str.length(),依次減1;
49         子串的起始位置循環每一輪都從0開始
50 (3)利用String類的indexOf(String str)方法,找出第一個返回值不是-1的子串並輸出(indexOf()方法,如果沒有找到匹配的值就返回-1)。
51        此時循環不結束,繼續找,因為可能有長度一樣的其它子串還未被發現。
52        當找到最長相同的子串時,置標志位isSearched為true,在外層循環中判斷該標志位,如果已經找到了最長的子串,就沒必要繼續循環子串的長度,結束循環。
53 */

 


免責聲明!

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



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