java实现leetcode题28的strStr()beat100%

该博客详细介绍了如何实现strStr()函数,即在一个字符串中查找另一个字符串首次出现的位置。博主提出了使用双指针的方法,通过遍历haystack字符串并截取与needle相同长度的子串进行匹配。当找到匹配的子串时,返回起始位置。如果未找到,则返回-1。此外,博主还特别提到了当needle为空字符串时,返回0这一特殊情况的处理,与C语言的strstr()和Java的indexOf()保持一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:问题描述来自于leetcode

一、问题描述:

28. 实现 strStr()

难度:简单

实现 strStr() 函数。

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

说明:

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

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

示例 1:

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

示例 2:

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

示例 3:

输入:haystack = "", needle = ""
输出:0

提示:

  • 1 <= haystack.length, needle.length <= 104
  • haystackneedle 仅由小写英文字符组成

二、思路:

​ xin麒的第一感觉便是使用字符串的subString函数截取和needle一样长度大小的字符串str,再和needle使用equals比较,然后通过双指针的移动来更新str不断比较,如果匹配成功就返回慢指针。

前提引入:

  • len变量保存needle字符串的长度;
  • lenh变量保存haystack字符串的长度;
  • 变量start表示慢指针,变量end表示快指针(作用域为for循环体内)
  • 字符串str为在haystack中截取长度为needle.length()的字符串;

过程:

  • 先处理hystack.length() < needle.length()以及needle.length() 等于0的情况;
  • 通过一次遍历for (int end = len; end <= lenh; end++),以慢指针start和快指针end截取到的字符串strneedle使用equals作匹配,每一次匹配后都将start++,如果相同,慢指针(start - 1)为所求,返回(start - 1)即可。
  • 如果没有找到可以匹配的,最终返回-1.

三、题解:

class Solution {
    public int strStr(String haystack, String needle) {
        int len = needle.length();
        int lenh = haystack.length();
        if (lenh < len || len == 0){
            return -1;
        }
        int start = 0;
        for (int end = len; end <= lenh; end++) {
            String str = haystack.substring(start++, end);
            if (str.equals(needle)){
                return start - 1;
            }
        }
        return -1;
    }
}

运行:

在这里插入图片描述

如果是换作StringBuilder那么也一样的思路:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值