大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:
输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
题解
- kmp算法
class Solution {
public:
void getNext(string needle,vector<int>&next){
next[0] = -1;
int i = -1,k = 0;
while(k < needle.size() - 1){
while(i != -1 && needle[k] != needle[i])i = next[i];
if(i == -1 || needle[i] == needle[k]){
next[++ k] = ++ i;
}
}
}
int strStr(string haystack, string needle) {
if(needle == "")return 0;
vector<int>next(needle.size());
getNext(needle,next);
for(int i = 0;i < next.size();i ++){
cout<<next[i]<<endl;
}
int j = 0;
for(int i = 0;i < haystack.size();i ++){
while(j != -1 && needle[j] != haystack[i])j = next[j];
j ++;
if(j == needle.size())return i - needle.size() + 1;
}
return -1;
}
};
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168723.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...