获取两个字符串中最长的子串并输出。
思路解析:
1.首先考虑我们要知道长度最短的字符串,这样子在比较的次数会更少。
2.我们首先从长度最小的字符串每次截取一小段判断是否在大串中
3.考虑到有可能有多个长度相同的子串,那么我们就应该将他们同时保存到集合中
4.要多考虑到各种异常的发生。
以下是我写的代码,主要用于练习用,不喜勿喷,欢迎指正,谨以此温习Java基础。
package com.yaml.procties;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* @date
* @version
* @Description 获取两个字符串具有最大共同的子串
*/
public class GetMaxComStr {
public static void main(String[] args) {
String str1 = "abcxxaddfnnn";
String str2 = "aabcddaddgnnn";
List<String> theMaxComStr = getTheMaxComStr(str1, str2);
if(theMaxComStr != null || theMaxComStr.size()> 0){
System.out.println(theMaxComStr.toString());
}
}
/**
* @author
* @date
* @parameter str1:表示待比较的第一个字符串 str2:表示待比较的第二个字符串
* @return 共同的最大的子串
* @throws @override
*/
public static List<String> getTheMaxComStr(String str1, String str2) {
if(str1 == null || str2 == null || str1.isEmpty() || str2.isEmpty()){
return null;
}
String max = str1.length() >= str2.length() ? str1 : str2;
String min = max == str1 ? str2 : str1;
String theMaxComStr = "";
boolean isNewComStr = true;
List<String> maxComList = null;
for (int i = 0; i < min.length(); i++) {
for (int j = 0; j < min.length() - i; j++) {
String subStr = min.substring(i, i + j + 1);
if (isNewComStr) {
maxComList = new ArrayList<String>();
maxComList.add(theMaxComStr);
isNewComStr = false;
}
if (max.indexOf(subStr) != -1) {
if (theMaxComStr.length() < subStr.length()) {
theMaxComStr = subStr;
isNewComStr = true;
}
if (theMaxComStr.length() == subStr.length())
maxComList.add(subStr);
}
}
}
return maxComList;
}
}