[LeetCode] 28. Find the Index of the First Occurrence in a String
Implement strStr().
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
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().
Example 1:
Input: haystack = "hello", needle = "ll" Output: 2
Example 2:
Input: haystack = "aaaaa", needle = "bba" Output: -1
Example 3:
Input: haystack = "", needle = "" Output: 0
Constraints:
0 <= haystack.length, needle.length <= 5 * 104haystackandneedleconsist of only lower-case English characters.
找出字符串中第一个匹配项的下标。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题意是给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。这个题有KMP算法的答案但是我这里只给出另一个简单的解法,不算暴力解。
时间O(n)
空间O(1)
JavaScript实现
1 /** 2 * @param {string} haystack 3 * @param {string} needle 4 * @return {number} 5 */ 6 var strStr = function (haystack, needle) { 7 // corner case 8 if (needle === '') { 9 return 0; 10 } 11 12 if (needle.length > haystack.length) { 13 return -1; 14 } 15 16 // normal case 17 let m = haystack.length; 18 let n = needle.length; 19 for (let i = 0; i < m - n + 1; i++) { 20 if (haystack.substring(i, i + n) === needle) { 21 return i; 22 } 23 } 24 return -1; 25 };
Java实现
1 class Solution { 2 public int strStr(String haystack, String needle) { 3 // corner case 4 if (needle == null || needle.length() == 0) { 5 return 0; 6 } 7 8 if (needle.length() > haystack.length()) { 9 return -1; 10 } 11 12 // normal case 13 int m = haystack.length(); 14 int n = needle.length(); 15 for (int i = 0; i < m - n + 1; i++) { 16 if (haystack.substring(i, i + n).equals(needle)) { 17 return i; 18 } 19 } 20 return -1; 21 } 22 }

浙公网安备 33010602011771号