在有序但是含有空的字符串中查找最左边特定字符串的位置
来源:互联网 发布:3ds淘宝哪家店没问题 编辑:程序博客网 时间:2024/05/17 07:52
比如给定一个字符串数组,“”,“ab”,"ab","","","","xx","yy","zz",查找ab字符串最左边的位置就是1,而不是2。
如果要找的字符串是空,或者根本没有找到,就返回-1
思路采用二分法,但是这里和普通二分不同,要进行判断
设要找的字符串为str,start=0,end等于字符串数组最后一个位置
如果当前mid处值等于要找的,这时候传给全局变量Pos,但是这个pos并非最终结果,因为很有可能他的左边,还有要找的字符串,所以要把end设为mid-1.
如果当前mid处值不等于要找的,这里有两个情况
一个是等于空串,这时候要从空串处从右到左遍历,如果遍历到最终,还是没有找到非空,肯定是返回-1了
如果找到了非空串,还要分三种情况判断
一种是等于要找的字符串,这时候就把位置付给全局变量pos
一种是小于要找的字符串,证明要找的字符串一定在右半区间,左半区间已经不用找了,start赋值为mid+1
一种是大于要找的字符串,这时候证明要找的肯定在其左边,end赋值为其下标-1。
一种是不等于空串,这样就按照普通二分来处理,大于要找的,就在左半区间找,小于要找的,就在右半区间找。
代码如下
#include <iostream>#include <string>using namespace std;int FindString(string a[10],string str,int n){ int start=0,end=n-1; int mid=(start+end)/2; int pos=-1; bool bContinue=false; if(str=="") return -1; while(start<=end) {int mid=(start+end)/2; if(a[mid]==str){ pos=mid; end=mid-1;}else if(a[mid]!=str){ if(a[mid]!="") { if(a[mid]<str) start=mid+1;else end=mid-1; } else { for(int k=mid-1;k>=start;k--) { if(a[k]!="") { if(a[k]<str) start=mid+1; else if(a[k]>str) end=k-1; else { pos=k; end=k-1; } bContinue=true; break; } } if(!bContinue) return -1; else { bContinue=false; } } } } return pos; }int main(){string a[]={"pp","de","cd","de","de","","","eg"};cout<<FindString(a,"de",sizeof(a)/sizeof(a[0]));return 0;}
0 0
- 在有序但是含有空的字符串中查找最左边特定字符串的位置
- 在有序但含有空的数组中查找字符串
- 在有序但含有空的数组中查找字符串
- 在有序但含有空的数组中查找字符串
- 在有序但含有空的数组中查找字符串
- 字符串问题---在有序但含有空的数组中查找字符串
- 在字符串中查找一个特定的字符最后一次出现的位置(即最右边那个)
- 在有序但含有None的数组中查找字符串 Python 版
- 获取特定字符串在 字符串中出现的所有位置
- Matlab在字符串数组中找到特定字符串的位置
- 查找某个字符在一个字符串中的位置,假设字符串中的字符是有序的,如“adfgikmnprs”中查找g的位置。(折半查找)
- 在文件中查找特定的字符串方法 grep命令
- 在字符串中查找一个特定的字符最后一次出现的位置,并返回字符所在位置。
- stcpbrk--在源字符串(s1)中找出最先含有搜索字符串(s2)中任一字符的位置并返回,若找不到则返回空指针。
- 字符串中查找字符串的位置
- 字符串中查找子字符串的位置
- MATLAB 判断字符串中是否含有特定的字符
- MATLAB 判断字符串中是否含有特定的字符
- UVALive 7003 A Balance Game on Trees 树形dp
- Fedora 12无法联网情况下安装gcc
- UI - RequestNetWork
- bzoj1642[Usaco2007 Nov]Milking Time 挤奶时间
- 用两个栈实现队列
- 在有序但是含有空的字符串中查找最左边特定字符串的位置
- 【四】GlusterFS管理员手册
- 秒针国家统计局项目:我的一些感想和8点安全措施
- 数据库连接池DBPool分析(八):redis连接池 redis_connection_pool
- free指针时的_CrtIsValidHeapPointer问题
- eclipse主题与字体设置
- 数据库备份与恢复
- Android 多线程处理之多线程用法大集合
- bond trading - tech contract