改进版的获取两个字符串的最大子串,之前发过一个帖子讲述获取两个字符串的一个最大子串,这次是获取两个字符串的所有的最大子串
public class Test037
{
/**功能:获取两个字符串的最大子串
*
* 思路:将短的那个字符串,获取其长度每次减一的子串,判断该子串是否存在于长的字符串中。
* @param args
*/
public static void main(String[] args)
{
System.out.println(compare("abced","efbceghi"));
}
//获取两个字符串所有的最大子串,longstr代表长度比较长的字符串
public static String compare(String longstr, String shortstr)
{
//定义一个标识符,功能:如果已经获取了长度为4的最大子串,就不再将长度小于4的子串放进StringBuffer
int flag = 0;
//定义一个字符串变量,用来存放字符串的子串
String tempstr;
//定义一个StringBuffer的对象sb,用来存放已找到的最大子串
StringBuffer sb = new StringBuffer();
//这里是个转换功能,如果用户输入的longstr比shortstr短,就将两个引用互换。
if(longstr.length() < shortstr.length())
{
tempstr = longstr;
longstr = shortstr;
shortstr = tempstr;
}
int len = shortstr.length();
//通过双层for循环获取短字符串的所有子串
for(int count =0;count <= len-1;count++)
{
for(int start = 0, end = len-count; end <= len; start ++,end++)
{
//获取短字符串的子串,需要注意的是substing(startIndex,endIndex)方法
//返回的子串包含startIndex,不包含endIndex
tempstr = shortstr.substring(start, end);
//判断长字符串中是否存在该子串
if(longstr.contains(tempstr))
{
if(flag == 0)
{
flag = tempstr.length(); //记录最大相同子串的长度
sb.append(tempstr + " "); //将最大相同子串存进sb
}
else if(tempstr.length() == flag) //如果还有长度相同的最大子串,存进sb
{
sb.append(tempstr + " ");
}
else //如果没有了长度相同的最大子串,跳出循环
break;
}
}
}
return (sb.toString().length()>0)? sb.toString() : "没有找到"; //如果sb的长度大于零,则返回sb.toString(),
//否则返回“没找到”
}
|
|