LeetCode刷题(20)~实现 strStr()【备注:KMP、双指针、Sunday暂未掌握!!!】

举报
海轰Pro 发表于 2021/08/05 23:41:07 2021/08/05
【摘要】 题目描述 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2 12 示例 2: 输入: haystack = "aaaaa", nee...

题目描述

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2

  
 
  • 1
  • 2

示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1

  
 
  • 1
  • 2

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

  
 
  • 1
  • 2
  • 3

解答 By 海轰

提交代码

class Solution {
public: int strStr(string haystack, string needle) {
  int len1=haystack.size(); int len2=needle.size(); if(len2==0) return 0; for(int i=0;i<len1-len2+1;++i) { if(haystack.substr(i,len2)==needle) return i; } return -1; }
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运行结果
在这里插入图片描述
思路
        滑动窗口!每次从haystack字符串中提取出与needle等长的字符串,并与之进行比较。遇到相同的,直接return 即可。最后表示没有一个符合,return -1.注意:needle为空的时候,需要返回0。
c++测试代码

#include <iostream>
#include <iterator>
#include <unordered_map>
using namespace std;
int strStr(string haystack, string needle) { int len1=haystack.size(); int len2=needle.size(); if(len2==0) return 0; for(int i=0;i<len1-len2+1;++i) { if(haystack.substr(i,len2)==needle) return i; } return -1; }

int main()
{ string a = "abbA"; string b = "bb"; cout<<strStr(a,b)<<endl; return 0;
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

其他解答

  • KMP【难点,一直都没有学会】
  • 双指针【思路较为简单,但是却没有写出来😭】
  • Sunday【也没有学会😭】

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-strstr

文章来源: haihong.blog.csdn.net,作者:海轰Pro,版权归原作者所有,如需转载,请联系作者。

原文链接:haihong.blog.csdn.net/article/details/107842275

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。