(题)找兄弟子串
2016-06-21 11:50
309 查看
描述:
2016.6.21一次电话面试,面试官问了这么一个问题,感觉不难,但是当时没有想出来,好可惜。。。。
问题是:在随意一个字符串中查找abcd的变形子串。
我的方法时间复杂度为O(n),将string遍历一遍,对vector排序时间复杂度应该是O(n*logn),但是vector中始终只有4个字符,n很小,故每次排序时间复杂度可以做O(1)。另外对原始串没有任何改变。
View Code
2016.6.21一次电话面试,面试官问了这么一个问题,感觉不难,但是当时没有想出来,好可惜。。。。
问题是:在随意一个字符串中查找abcd的变形子串。
我的方法时间复杂度为O(n),将string遍历一遍,对vector排序时间复杂度应该是O(n*logn),但是vector中始终只有4个字符,n很小,故每次排序时间复杂度可以做O(1)。另外对原始串没有任何改变。
#include "stdafx.h" #include<iostream> #include<string> #include <vector> #include<algorithm> using namespace std; static bool compare(const char c1,const char c2) { return c1 < c2; } int _tmain(int argc, _TCHAR* argv[]) { string str; getline(cin,str); int len = str.length(); if(len == 0) return 0; for(int i = 0;i < len; i++) { vector<char> vc; //将每4个字符加入vector for (int j = i;((i+3 <len) &&(j <=i+3)) ;j++) vc.push_back(str[j]); //对vector排序,记住compare函数 sort(vc.begin(),vc.end(),compare); vector<char>::iterator vci = vc.begin(); if(vc.size() == 4) if(*vci++ == 'a' && *vci++ == 'b' && *vci++ == 'c' && *vci =='d') {//如此遍历vector,我也是不知是如何想的,哈哈。实现了就好 cout<<i<<","<<i+3<<":"<<str.substr(i,4); cout<<endl; } } system("pause"); return 0; }
View Code
相关文章推荐
- Java中常用的类型转换(推荐)
- 几句话实现导航栏透明渐变 – iOS
- java教程:Java开发桌面应用程序的优劣
- Chrome 中的 JavaScript 断点设置和调试技巧
- css3弹性盒模型(Flexbox)
- URL
- Sass (Syntactically Awesome StyleSheets)
- Linux tar 解压 压缩(转)
- Centos Python2 升级到Python3
- kangle web server源代码安装简明教程
- Serverless架构
- 【Linux设备驱动】Linux输入子系统之底层驱动
- iOS 10 个实用小技巧(总有你不知道的和你会用到的)
- 匹配追踪和正交匹配追踪
- union 和union all的区别
- 管道 无法改变变量值 的问题
- bugreport_xf.exe 系统错误 丢失LIBEAY32.dll
- Java垃圾回收机制
- SLAM papers study summay
- RedirectAttributes