1 找到两个字符串中的公共子字符串,如stra="abfdsaf",strb="fdsgdfg",找出两个字符串的公共字串fds,由于java还不熟练,不是最优的方案,有机会优化
1 public class MyTestDemo {
2 //被测试字符串a
3 String stra = "abfdsaf";
4 //被测试字符串a
5 String strb = "abfdsaf";//fdsgdfg
6 //存储两个字符串的最大长度和最小长度
7 int min,max;
8 //判断出最长的字符串后,将长度最大的字符串存储再strMax,长度小的字符串给strMin
9 String strMin,strMax;
10 //存储找到的所有字符串
11 ArrayList<String> sameString = new ArrayList();
12 //存储最大子字符串
13 String result; 14 15 @Test 16 public void getSameSubString(){ 17 //找出长短字符串,并赋值给变量 18 if(stra.length() <= strb.length()?true:false){ 19 min = stra.length(); 20 max = strb.length(); 21 22 strMin = stra; 23 strMax = strb; 24 25 isSubString(); 26 } 27 else{ 28 min = strb.length(); 29 max = stra.length(); 30 31 strMin = strb; 32 strMax = stra; 33 34 isSubString(); 35 } 36 } 37 38 /** 39 * 遍历最小长度字符串,截取子字符串,依次左移截取,每次遍历截取子字符串,并使用indexOf方法,判断截取的字符串是否在最大长度的字符串中出现,如果出现就添加到ArrayList中,最后遍历ArrayList,找到最大长度的字符串 40 */ 41 public void isSubString(){ 42 String more,less,temp; 43 for(int j=0;j<=min;j++){ 44 for(int i=min;i>=j;i--){ 45 if(strMax.indexOf(strMin)>0){ 46 sameString.add(strMin); 47 } 48 if((strMax.indexOf(strMin.substring(j, i))) > 0 ){ 49 sameString.add((strMin.substring(j, i))); //还有题目要求找出最大公共字符串,再if里加上break即可,不加则输出所有子字符串 50 } 51 } 52 } 53 result = sameString.get(0); 54 55 for(int i=1;i<sameString.size();i++){ 56 if(result.length() < sameString.get(i).length()){ 57 result = sameString.get(i); 58 } 59 } 60 System.out.println(result); 61 } 62 }
2