二分法找字符串
2018-02-04 16:40
120 查看
题目描述
有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一个算法,找出给定字符串的位置。算法的查找部分的复杂度应该为log级别。
给定一个string数组str,同时给定数组大小n和需要查找的string x,请返回该串的位置(位置从零开始)。
测试样例:
[“a”,”b”,”“,”c”,”“,”d”],6,”c”
返回:3
有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一个算法,找出给定字符串的位置。算法的查找部分的复杂度应该为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) { // write code here int start = 0, end = n - 1; int count=0; while (start<end){ int mid = (start + end) / 2; if (str[mid] == ""){ while (mid > start && str[mid] == ""){ mid--; } while (mid<end&&str[mid] == ""){ mid++; } } if (str[mid]>x){ end = mid - 1; } else if (str[mid]<x){ start = mid + 1; } else if (str[mid] == x){ return mid; } } return start; } };
class Finder { public: int findString(vector<string> str, int n, string x) { // write code here int i = 0; int j = n - 1; while (i <= j) { int mid = (i + j) / 2; if (str[mid] == " ") { int index = mid; while (index>=i&&str[mid] == " ") { --index; } if (str[index] == x) return index; else if (str[index] > x) j = index - 1; else i = index + 1; } else { if (str[mid] == x) return mid; else if (str[mid] > x) j = mid - 1; else i = mid + 1; } } return -1; } };
相关文章推荐
- 利用二分法获得截取字符串长度
- 百度面试题-字符串前缀匹配(二分法)
- 二分法,字符串倒序
- 二分法返回字符串的位置
- 小程序:二分法//字符串转变成整数//删除代码里的注释
- 二分法拼接字符串——字符串拼接节约性能
- 二分法:CF371C-Hamburgers(二分法+字符串的处理)
- PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
- j2se学习中的一些零碎知识点4之字符串,数组和异常(使用数组实现冒泡排序算法和选择排序以及二分法查
- [code]二分法:从已排好序的String数组中查询要搜索的字符串的下标
- Sorting&Searching 二分法找有空字符串的数组 @CareerCup
- PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
- 无符号整数转换为字符串及其SSE优化
- 字符串替换
- 剑指offer 6.3 知识迁移能力8-左旋字符串
- iOS中 判断字符串 中文字符 字母 数字 以及下划线
- 字符串的驻留
- 将字符串按照单词单位逆序排列输出
- SQL数据库隐藏服务器后需要在连接字符串增加端口号,(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)]
- 替换字符串中连续出现的指定字符串