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