LeetCode 28:实现strStr() Implement strStr()

爱写bug(ID:icodebugs)

作者:爱写bug

实现 strStr() 函数。

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

Implement strStr().

Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Example 1:

Input: haystack = "hello", needle = "ll"
Output: 2

Example 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

Clarification:

What should we return when needle is an empty string? This is a great question to ask during an interview.

For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C's strstr() and Java's indexOf().

说明:

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

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

解题思路(Java):

  • 暴力穷举:

    复杂度:时间 O(n^2) 空间 O(1)

    字符串 a 从第一个索引开始 逐一匹配字符串 b 的第一个索引:a[i++]==b[0],如果为true,则进入内循环字符串a从第 i+j 个字符开始与字符串b 第 j个字符匹配:a[i+j]==b[j]

代码:

class Solution {
public int strStr(String haystack, String needle) {
if(needle.equals(""))return 0;
int haystackLen=haystack.length(),needleLen=needle.length();
char firstChar=needle.charAt(0);

for(int i=0;i<=haystackLen-needleLen;i++){
if(haystack.charAt(i)==firstChar){
int j=1;
for(;j<needleLen;j++){
if(haystack.charAt(i+j)!=needle.charAt(j)) break;
}
if(j==needleLen) return i;
}
}
return -1;
}
}

上一篇:5-1


下一篇:项目需求:基于微信平台的拼团活动系统