题目描述
有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一个算法,找出给定字符串的位置。算法的查找部分的复杂度应该为log级别。
给定一个string数组str,同时给定数组大小n和需要查找的string x,请返回该串的位置(位置从零开始)。
测试样例:
["a","b","","c","","d"],6,"c"
返回:3
import java.util.*;
public class Finder {
public int findString(String[] str, int n, String x) {
// write code here
int i =0,j=n-1;
while(i<=j)
{
int mid = (i+j)/2;
if(str[mid].equals(" "))
{
int index = mid;
while(str[index].equals(" ")&&index>i)
{
index--;
}
if(index==i)
{
index = mid+1;
while(str[index].equals(" ")&&index<j)
{
index++;
}
}
mid = index;
}
if(str[mid].equals(x)) return mid;
else if(str[mid].compareTo(x)>0) j = mid-1;
else i = mid+1;
}
return -1;
}
}