题目描述
稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。
示例1:
输入: words = [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,“dad”, “”, “”], s = “ta”
输出:-1
说明: 不存在返回-1。
示例2:输入:words = [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,“dad”, “”, “”], s = “ball”
输出:4
提示:words的长度在[1, 1000000]之间
做题思路
本题我们还是可以利用二分查找
只不过我们再判断的时候可能会遇到空字符串,其他的和以前的处理方法一致
当碰到空格的时候,我们可以先判断最左边的值是否和目标值一样,如果不一样直接+1
if(s[mid].equals("")){ if(s.equals(target)){ return left; } left++; }
注意:我当时做这个题目的时候我犯了一个低级的错误就是我误把 空格当成空字符了。" " “” 这点大家要注意哈。
代码实现
class Solution {
public int findString(String[] words, String s) {
int left=0;
int len=words.length;
int right=len-1;
while(left<=right){
int mid=(left+right)/2;
if(words[mid].equals(s))return mid;
else if(words[mid].equals("")){
if(words[left].equals(s))return left;
left++;
}
else if(words[mid].compareTo(s)<0)left=mid+1;
else right=mid-1;
}
return -1;
}
}