最大公串
Java 编程中,获取两个字符串的最大公串是常见的对String的综合操作练习,本文是偏基础向,使用了基本的判断、循环与String的一些简单方法。
首先编写main主函数,用以调用获取最大公串的方法:
public static void main(String[] args) {
System.out.println("<========求最大公串========>");
///1.获取两个字符串的最大公串
s1 = "012345abcdef";
s2 = "abcdefg2345ab";
String[] s1Arr = publicString(s1,s2);
if (s1Arr.length == 0){
System.out.println("两字符串没有最大公串");
}
else {
System.out.println("两字符串的最大公串为:");
for (int i = 0; i < s1Arr.length; i++) {
System.out.print(s1Arr[i]+", ");
}
}
}
publicString(s1,s2)为自定义的获取最大公串的方法,返回值为一个字符串数组(因为可能不止一个),用s1Arr接收;
下面是publicString方法体:
public static String[] publicString(String string1,String string2){
//将两个字符串区分长短
String maxstr = string1.length() > string2.length() ? string1 : string2;
String minstr = string1.length() < string2.length() ? string1 : string2;
//将两个字符串区转换为char数组
char[] maxarr = maxstr.toCharArray();
char[] minarr = minstr.toCharArray();
int count = 1;//默认初始最大公串长度为1
int count1 = 0;//标记最大公串个数
String[] strArr = new String[maxarr.length];//新建一个字符串数组,用来存储最大公串
//循环遍历两个字符数组,获取公共字符串
for (int i = 0;i < minarr.length;i++){
for (int j = 0;j<maxarr.length;j++){
int tmp = 0;//临时标记公串长度
if (minarr[i] == maxarr[j]){//首先找到相等的字符
//k循环查找从相等的字符开始向后有几个字符连续相等
for (int k=0;k<((minarr.length-i)<(maxarr.length-j)?(minarr.length-i):(maxarr.length-j));k++){
if (minarr[i+k] == maxarr[j+k]){//如果后续字符也相等,则公串长度+1
tmp++;
}else {//一旦不相等立即结束k循环
break;
}
}
}
if (tmp == count){//若新找的公串长度等于count,则添加进字符串数组
strArr[count1++] = minstr.substring(i,tmp+i);
}
if (tmp > count){//若新找的公串长度大于count,则重置字符串数组与公串个数,并将其添加进新数组
strArr = new String[maxarr.length];
count1 = 0;
strArr[count1++] = minstr.substring(i,tmp+i);
count = tmp;//使count等于新的公串长度
}
}
}
String[] StrArr1 = new String[count1];//新建一个长度等于公串个数的字符串数组
for (int i = 0;i<count1;i++){ //将找到的最大公串遍历放进新数组
StrArr1[i] = strArr[i];
}
return StrArr1;
}
运行结果为:
本练习有助于加深对for循环、String和数组的理解与应用,当然这只是本人的一次课堂作业练习,肯定有较多需要精简去冗的地方,请见谅,愿大家共同进步。