版权声明:本文为博主原创文章,未经博主容许不得转载。java
/**数组
* 功能:有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置。app
*/
[java] view plain copyspa
- /**
- * 思路:对二分查找法作修改,与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);//搜索左半边
- }