找出字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iov3Rain/article/details/90242918

题目描述

有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一个算法,找出给定字符串的位置。算法的查找部分的复杂度应该为log级别。

给定一个string数组str,同时给定数组大小n和需要查找的string x,请返回该串的位置(位置从零开始)。

测试样例:

["a","b","","c","","d"],6,"c"

返回:3

变形的二分查找,重新设定了mid的生成方法。

mid为从high开始往low位走,第一个不为空的字符串

class Finder {
public:
    int findString(vector<string> str, int n, string x) {
        // write code here1
        int low = 0;
        int high = str.size() - 1;
        while(low < high)
        {
            int mid;
            for(mid = high; mid >= low; --mid)
                if(str[mid] != "")
                    break;
            if(str[mid] < x)
            {
                low = mid + 1;
            }
            else if(str[mid] > x)
            {
                high = mid - 1;
            }
            else
            {
                return mid;
            }
        }
        return -1;
    }
};

猜你喜欢

转载自blog.csdn.net/iov3Rain/article/details/90242918