欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在有序但含有空的数组中查找字符串

程序员文章站 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"));

	}
}
在有序但含有空的数组中查找字符串