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