您的位置:首页 > 其它

有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置

2016-11-24 00:00 232 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。

/**

* 功能:有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置。

*/
[java] view plain copy

/**

* 思路:对二分查找法做修改,与mid比较的地方,如果mid为空字符串,则将mid换到离它最近的非空字符串的位置。

* @param strings

* @param str

* @return

*/

public static int search(String[] strings,String str){

if(strings==null||str==null||str=="")

return -1;

return searchStr(strings,str,0,strings.length);

}

public static int searchStr(String[] strings,String str,int first,int last){

if(first>last)

return -1;

int mid=(first+last)/2;

//若mid为空字符串,找出离它最近的非空字符串

if(strings[mid].isEmpty()){

int left=mid-1;

int right=mid+1;

while(true){

if(left<first&&right>last)

return -1;

else if(right<last&&!strings[right].isEmpty()){

mid=right;

break;

}else if(left>first&&!strings[left].isEmpty()){

mid=left;

break;

}

left--;

right++;

}

}

if(str.equals(strings[mid]))

return mid;

else if(strings[mid].compareTo(str)<0)

return searchStr(strings, str, mid+1, last);//搜索右半边

else

return searchStr(strings, str, first, mid-1);//搜索左半边

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐