字符串匹配算法 【微软面试100题 第三十三题】
题目要求:
给一串很长字符串,要求找到符合要求的字符串。
例如目的串:123,则1*****3***2,12*****3这些都要找出来。
其实就是类似一些和谐系统。。。。。。
题目分析:
1.假如目的串为:"423",输入长字符串为:"4fsdfk2jfl3fd2jfksd3j4d4d4jkfd4jd3kdf2",则应该输出 "4fsdfk2jfl3","2jfksd3jld4","4jd3kdf2".
2.使用c++中的map<字符,个数>,先把目的串的每个字符都存入map中,且每个字符的个数初始化为1.然后逐个遍历长字符串中的字符,如果该字符在map中有存储且个数为1,则num加1,当num=N时,说明已经找到了N个目的串中的字符,可以输出了,输出之后又把map等变量重新初始化。startFlag=1表示这一次遍历还没有找到长字符串中的字符匹配到目的串中的字符,当第一次匹配时,则把startFlag=0.同时startPos更新,startPos表示某一次遍历时第一次匹配时的位置。
代码实现:
#include <iostream> #include <map> using namespace std; const int N = 3; void Handle(char *inputStr,char *desStr); int main(void) { char input[] = {"4fsdfk2jfl3fd2jfksd3j4d4d4jkfd4jd3kdf2"}; char des[] = "423"; Handle(input,des); return 0; } void PrintStr(char *start,char *end) { while(start != end) { cout << *start; start++; } cout << *end; cout << endl; } void InitHash(map<char,int> &hash,char *str) { while(*str != '\0') { hash[*str] = 1; str++; } } void Handle(char *inputStr,char *desStr) { if(inputStr==NULL || desStr==NULL) return ; map<char,int> hash; InitHash(hash,desStr); int startFlag = 1,num = 0; char *startPos; map<char,int>::iterator iter; while(*inputStr != '\0') { iter = hash.find(*inputStr); if(iter != hash.end()) { if((*iter).second == 1) { if(startFlag) { startPos = inputStr; startFlag = 0; } ++hash[*inputStr]; num++; if(num==3) { PrintStr(startPos,inputStr); //重新初始化 num=0; InitHash(hash,desStr); startFlag = 1; } } //第一个匹配字符连续出现时,选择最后一个 //如选择输出"4jd3kdf2"而不是"4d4d4jkfd4jd3kdf2",因为第一个匹配的为4,有多个 //连续的4,选最后一个 else if(*startPos == *inputStr) { startPos = inputStr; } } inputStr++; } }
很多时候不是我们做不好,而是没有竭尽全力......
分类:
【微软面试100题】
posted on 2014-10-31 00:00 tractorman 阅读(586) 评论(1) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?