首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >28. 实现strStr()

28. 实现strStr()

作者头像
张伦聪zhangluncong
发布2022-10-26 18:15:49
发布2022-10-26 18:15:49
2190
举报

实现 strStr() 函数。

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

示例 1:

代码语言:javascript
复制
输入: haystack = "hello", needle = "ll"
输出: 2

示例 2:

代码语言:javascript
复制
输入: haystack = "aaaaa", needle = "bba"
输出: -1

说明:

  • 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
  • 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

解:题目不难,设置两个指针i,j分别指向haystack和needle,当碰到相同字符,保存一个fakeI,i,j同时遍历,跳出循环时如果j== nLength那说明存在,直接返回保存的fakeI,否则i重置fakeI+1继续。就是LeetCode的有些用例太恶心,比如null和空字符串,返回0和-1的问题,我觉得既然是重点考察算法,就没必要搞这些恶心的用例,只要主要算法思想出来了就行,这些临界点的问题只是让做题者多花了时间在调试代码上,没有什么意义。

代码语言:javascript
复制
class Solution {
    public int strStr(String haystack, String needle) {
        if (needle == null) {
            return 0;
        }
        int hLength = haystack.length();
        int nLength = needle.length();
        if (hLength == 0 && nLength == 0) {
            return 0;
        }
        if (hLength != 0 && nLength == 0) {
            return 0;
        }
        if (needle.equals(haystack)) {
            return 0;
        }
        int i = 0;
        int j = 0;
        while (i <= (hLength - nLength)) {
            int fakeI = i;
            while (j < nLength && haystack.charAt(i) == needle.charAt(j)) {
                i++;
                j++;
            }
            if (j == nLength) {
                return fakeI;
            } else {
                i = fakeI + 1;
                j = 0;
            }
        }
        return -1;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档