版權聲明:本文爲博主原創文章,未經博主容許不得轉載。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);//搜索左半邊
- }