package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Max_Subs... ...
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Max_Substring_Test { public static void main(String[] args) { /* * 幾個字元串的最大公共子字元串 */ String str1 = "eriousdfndnfdlk"; String str2 = "dkgfdkgkdjgdjgjksjgksgjsdkjsdierioe"; String str3 = "ldskfjdskierundsnfjerioejrejrheruer3j43j4hj3"; String sub; List<String> list=new ArrayList<String>(); for (int i = 0; i < str1.length(); i++) { sub = str1.substring(0, i); if(str2.indexOf(sub)!=-1&&str3.indexOf(sub)!=-1) { // System.out.println(sub); list.add(sub); } } Collections.sort(list, new Comparator<String>() { @Override public int compare(String arg0, String arg1) { int i=arg1.length()-arg0.length(); return i; } }); System.out.println("The max subString is "+list.get(0)); } }
上面方法中測試的子串都是從第一個字母開始的,所以並不完全,子串還有很多,還有從第二個字母開始,從第三個字母開始,等等的子字元串
所以,還應該再加一層迴圈,把substring(開始參數,結束參數)中開始和結束參數都設置為變數,開始參數從0開始到最後一個字母下標,結束參數起始位置要根據開始參數而定,否則會出現下標異常
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Max_Substring_Test { public static void main(String[] args) { /* * 幾個字元串的最大公共子字元串 */ String str1 = "eriousdfndnfdlk"; String str2 = "dkgfdkgkdjgdjgjksjgksgjsdkjsdierioe"; String str3 = "ldskfjdskierundsnfjerioejrejrheruer3j43j4hj3"; String sub; List<String> list = new ArrayList<String>(); for (int i = 0; i < str1.length(); i++) { for (int j = i; j < str1.length(); j++) { System.out.println(sub = str1.substring(i, j+1)); if (str2.contains(sub)&& str3.contains(sub)) { System.out.println(sub); list.add(sub); } } } Collections.sort(list, new Comparator<String>() { @Override public int compare(String arg0, String arg1) { int i = arg1.length() - arg0.length(); return i; } }); System.out.println("The max subString is " + list.get(0)); } }