基本思想
1、将字符串数组转化为二维字符数组
2、将第一个字符数组作为基准去检测其余字符数组
3、将判断是公共前缀的字符加入StringBuffer类中,作为输出结果
- 主方法
public static void main(String args[]){
String []strings={"adsf","adfg","adrf"};
String s=longestCommonPrefix(strings);
System.out.println(s);
}
- longestCommonPrefix()方法,用于取得字符串数组的公共前缀
public static String longestCommonPrefix(String[] strs) {//得到字符串公共最长前缀的方法
if (strs.length==0){//传入的参数如果为空,直接返回
return "";
}else {
int n=strs.length;//获得传入字符串的个数
int min=strs[0].length();//设置一个标记,用于记录输入的字符串中最短的长度(在下面设置二维字符数组的遍历时需要用到)
char[][]chars=new char[n][];//创建二维数组,n行
for(int i=0;i<n;++i){
int m=strs[i].length();
if(m<min){//如果小于就更新最短长度
min=m;
}
chars[i]=new char[m];//动态的给第i行数组赋值长度为m
char[]temp=strs[i].toCharArray();
for (int j=0;j<strs[i].length();++j){
char c=temp[j];
chars[i][j]=c;//给二维字符数组赋值
}
}
StringBuffer stringBuffer=new StringBuffer("");//定义一个可以改变的字符串,作为返回值
for(int j=0;j<min;++j) {//这个for循环用于检测公共前缀(是对二维数组的操作)
boolean flag = true;//设置一个标记
char ch=chars[0][j];//这里以第一个字符串来作为基准检测其他字符串,故下面的for循环从1开始
for(int i=1;i<n;++i){
if(ch!=chars[i][j]){//当检测到不相等时就将标记设置为false
flag=false;
}
}
if (flag == true) {//当前字符是公共前缀
stringBuffer.append(ch);
}else {//出现不适公共前缀就跳出循环
break;
}
}
String result=stringBuffer.toString();
return result;
}
}