【牛客网】马三来刷题之串的模式匹配
题目链接:http://www.nowcoder.com/practice/084b6cb2ca934d7daad55355b4445f8a?tpId=49&tqId=29363&rp=1&ru=/ta/2016test&qru=/ta/2016test/question-ranking
- 热度指数:977时间限制:3秒空间限制:32768K
- 本题知识点: 编程基础 字符串
- 算法知识视频讲解
题目描述
对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。
给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。
"acbc",4,"bc",2
返回:2
想要简单的通过这道题非常简单,直接用STL的find方法或者Java中IndexOf函数就可以了,但是如果要是面试的时候或者真正在线笔试的时候这么写的话就比较惨了,面试官一定会让你重新用KMP写一遍~ 这道题主要考察的是KMP算法的使用。
先来看一下之前说的一行通过的代码:
int findAppearance(string A, int lena, string B, int lenb)
{A.find(B);
}
另一种借助了string 的substr方法通过的代码,就是简单的从头开始枚举:
int findAppearance(string A, int lena, string B, int lenb)
{for(int i=0;i<=lena-lenb;i++){string tmp=A.substr(i,lenb);if(tmp.compare(B)==0)return i;}return -1;
}
KMP算法:
vector<int> Getnext(string p){int k=-1;int j=0;vector<int> next(500);int plen=p.size();next[0]=-1;while(j < plen-1){if(k ==-1 || p[k] == p[j]){k++;j++;next[j]=k;}else{k=next[k];}}return next;}int kmpsearch(string s,string p,vector<int> nex){int i=0;int j=0;int slen=s.size();int plen=p.size();while(i < slen && j< plen){if(j == -1 || s[i] == p[j]){i++;j++;}else{j=nex[j];}}if(j == plen){return i-j;}else{return -1;}}int findAppearance(string A, int lena, string B, int lenb) {vector<int> nextB=Getnext(B);return kmpsearch(A,B,nextB);}
每天一道题,保持新鲜感,就这样~
【牛客网】马三来刷题之串的模式匹配相关推荐
- 牛客网SQL 进阶篇刷题
牛客网SQL 进阶篇刷题(1-19) 用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001,并在50分钟后提交,得了90分: 用户1002在2021年9月4日上午7点1分2秒开始 ...
- 【自我救赎--牛客网Top101 4天刷题计划】 第三天 渐入佳境
第三天 声明:本系列文章仅适合二刷有经验的算法er学习,以后会出详细的每一题的讲解,这里只是简单的说明思路来帮助大家快速刷完Top101,另外博主的算法全程跟着 labuladong 大佬学习,这里特 ...
- 【自我救赎--牛客网Top101 4天刷题计划】 第四天 登峰造极
第四天 声明:本系列文章仅适合二刷有经验的算法er学习,以后会出详细的每一题的讲解,这里只是简单的说明思路来帮助大家快速刷完Top101,另外博主的算法全程跟着 labuladong 大佬学习,这里特 ...
- 【自我救赎--牛客网Top101 4天刷题计划】 第一天 热身运动
第一天 声明:本系列文章仅适合二刷有经验的算法er学习,以后会出详细的每一题的讲解,这里只是简单的说明思路来帮助大家快速刷完Top101,另外博主的算法全程跟着 labuladong 大佬学习,这里特 ...
- 为了OFFER系列 | 牛客网美团点评数据分析刷题
@Author:Runsen 对于大学的每一个阶段,都有着不同的意义,在大学期间一定要有明确的战略.打法,以及人生布局,才能最大程度的提升自己,才能在未来走的更远. 现如今大四,为了OFFER,冲啊 ...
- 原创 牛客网产品笔试题刷题打卡——用户研究
QQ和微信的区别. 1.产品定位 QQ:"每一天,乐在沟通",是一款基于互联网的社交通讯软件.QQ是PC互联网的产物,侧重社交,更娱乐化. 微信:"一个生活方式" ...
- string类函数和牛客网剑指offer刷题记录
1.strcat char* strcat(char *strDest,const char *strSrc){assert(strDest && strSrc);char *p = ...
- 牛客网C语言入门刷题(BC1 ~ BC50)
文章目录 BC1 实践出真知 BC2 我是大V BC3 有容乃大 BC6 小飞机 BC7 缩短二进制 BC8 十六进制转十进制 BC9 printf的返回值描述 BC10 成绩输入输出 BC11 学生 ...
- 牛客网java基础知识刷题记录-02
2022.2.17-2022.3.1 try块后必须有catch块.() 正确 错误 考察内容:try的形式有三种:1. try-catch2. try-finally3. try-catch-fin ...
- 原创 牛客网产品笔试题刷题打卡——需求分析/数据分析/文档攥写
ARPU(ARPU-AverageRevenuePerUser)即每用户平均收入.用于衡量电信运营商和互联网公司业务收入的指标.ARPU注重的是一个时间段内运营商从每个用户所得到的收入.很明显,高端的 ...
最新文章
- [转]SQL 约束讲解
- Matlab与线性代数 -- 数组与矩阵的乘幂
- 设计模式之建造者模式学习笔记
- 【耗子啃过的SEO之入门知识二】SEOer必看,初级、中级和高级SEOer
- 编写一个Zipkin Server
- TypeScript strictness - 严格语法检查
- 1-3-顺时针旋转矩阵
- MATLAB学习笔记(六)
- 通过keepalived搭建lvs高可用集群
- MySQL OCP认证(文末附参考题)
- CVPR 2021 TrafficQA
- Delta并联机构运动学分析
- 提供AlTi5B催化富铝合金水解产氢材料/Ru/Ce(OH)CO3纳米材料/Al-Ga-Mg-Sn多元铝合金
- 三个基本的布尔逻辑算符是_常用布尔逻辑运算符有哪些
- msm8909 android5.1.1,MSM8909+Android5.1.1启动流程(1)---概述
- 淘淘商城---8.7
- python拼音检查
- 向量范数和矩阵范数的理解
- 将电脑调成护眼色不一定起到护眼的功能
- 骷髅创意设计灵感_20种创意旅行应用程序设计,激发您的灵感