0
点赞
收藏
分享

微信扫一扫

LeetCode 28.实现 strStr()(简单)

LeetCode 28.实现 strStr()(简单)_字符串长度

题目描述

LeetCode 28.实现 strStr()(简单)_字符串长度_02


实现 ​​strStr()​​ 函数。

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

LeetCode 28.实现 strStr()(简单)_字符串长度

说明

LeetCode 28.实现 strStr()(简单)_字符串长度_02


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

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

LeetCode 28.实现 strStr()(简单)_字符串长度

示例 1

LeetCode 28.实现 strStr()(简单)_字符串长度_02


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

LeetCode 28.实现 strStr()(简单)_字符串长度

示例 2

LeetCode 28.实现 strStr()(简单)_字符串长度_02


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

LeetCode 28.实现 strStr()(简单)_字符串长度

示例 3

LeetCode 28.实现 strStr()(简单)_字符串长度_02


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

LeetCode 28.实现 strStr()(简单)_字符串长度

提示

LeetCode 28.实现 strStr()(简单)_字符串长度_02


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

LeetCode 28.实现 strStr()(简单)_字符串长度

题目分析

LeetCode 28.实现 strStr()(简单)_字符串长度_02


这道题可以用双指针的思想求解,先获取各字符串的长度,再遍历原字符串,对两个指针指向的字符判断是否一致,如果一致则同时更新两个指针指向下一个字符继续判断,直到匹配的长度与子字符串相同,否则执行回退操作,然后继续检查字符串。

LeetCode 28.实现 strStr()(简单)_字符串长度

题解一

LeetCode 28.实现 strStr()(简单)_字符串长度_02


执行用时: 0 ms

内存消耗: 39.3 MB

class Solution {
public int strStr(String haystack, String needle) {
// 获取各字符串长度
int n = needle.length();
int h = haystack.length();
// 子字符串长度大于原字符串长度
if (n > h) {
// 不存在
return -1;
}
// 双指针
int i = 0;
int j = 0;
// 遍历原字符串
while (i < h) {
// 字符相同更新右指针
if (j < n && haystack.charAt(i) == needle.charAt(j)) {
++j;
} else {
// 否则进行指针回退操作
i -= j;
j = 0;
}
// 存在子字符串返回索引
if (j == n) {
return i + 1 - n;
}
++i;
}
return -1;
}
}

LeetCode 28.实现 strStr()(简单)_字符串长度

题解二

LeetCode 28.实现 strStr()(简单)_字符串长度_02


执行用时: 0 ms

内存消耗: 39.7 MB

class Solution {
public int strStr(String haystack, String needle) {
// 获取各字符串长度
int n = needle.length();
int h = haystack.length();
// 遍历原字符串
for (int start = 0; start < h - n + 1; ++start) {
// 调用方法直接判断是否存在匹配的子字符串
if (haystack.substring(start, start + n).equals(needle)) {
return start;
}
}
return -1;
}
}

题目来源:力扣(LeetCode)




举报

相关推荐

0 条评论