class Solution {
public String longestCommonPrefix(String[] strs) {
//如果字符串长度为null 或者 长度为0 返回“”
if(strs==null||strs.length==0){
return " ";
}else{
return CommonPrefix(strs,0,strs.length - 1);
}
}
//用递归加二分的思想写一个从数组返回字符串的方法
public String CommonPrefix(String[] strs,int left,int right){
//如果left==right了 说明这就是一个字符串 递归结束返回
if (left==right){
return strs[left];
}else{
//二分
int mid = (left+right)/2;
//向左递归
String left1= CommonPrefix(strs,left,mid);
//向右递归
String right1= CommonPrefix(strs,mid+1,right);
return Containss(left1,right1);
}
}
//定义一个方法 比较递归接受的两个字符串
public String Containss(String left,String right){
//比较公共前缀 是找字符串长度最小的 所以我们Math.min 比较 minString 接受长度
int minString = Math.min(left.length(),right.length());
//i表示下表 i小于最小的字符串长度
for(int i=0;i<minString;i++){
//如果他们第i个字符相等 不进入if 如果进入了if 说明已经找到了他们的公共前缀
if(left.charAt(i)!=right.charAt(i)){
//直接return 两个字符串的任意一个 0-i 左闭右开 截取的字符串
return left.substring(0,i);
}
}
//如果走完了还没有返回 说明这个字符串就是他们公共的前缀
return left.substring(0,minString);
}
}