在有序但含有空的数组中查找字符串
程序员文章站
2022-07-13 21:29:00
...
//在有序但含有空的数组中查找字符串
public class getStrIndex{
//二分法查找字符串(给定str返回其所在的最左边的索引)
public static int GetStrIndex(String[]chas,String str)
{
if(chas==null||chas.length==0||str==null)
{
return -1;
}
int len=chas.length-1; //字符串数组的长度
int res=-1; //最后返回的位置
int left=0;
int right=len;
int mid=0;
int i=0;
while(left<=right)
{
mid=(left+right)/2;
if(chas[mid]!=null&&chas[mid]==str)
{
res=mid;
right=mid-1;
}else if(chas[mid]!=null)
{
if(chas[mid].compareTo(str)<0)
{
left=mid+1;
}else{
right=mid-1;
}
}else{
i=mid;
//左边全部为null的字符串
while(chas[i]==null&&--i>=left)
{
}
if(i<left||chas[i].compareTo(str)<0)
{
left=mid+1;
}
else{
res=chas[i]==str?i:res;
right=i-1;
}
}
}
return res;
}
public static void main(String[]args)
{
String[]chas={null,"a",null,"a",null,"b","c"};
System.out.println(GetStrIndex(chas,"a"));
}
}