Description:
Given two strings needle
and haystack
, return the index of the first occurrence of needle
in haystack
, or -1
if needle
is not part of haystack
.
Examples:
Example 1:
Input: haystack = "sadbutsad", needle = "sad"
Output: 0
Explanation: "sad" occurs at index 0 and 6.
The first occurrence is at index 0, so we return 0.
Example 2:
Input: haystack = "leetcode", needle = "leeto"
Output: -1
Explanation: "leeto" did not occur in "leetcode", so we return -1.
Solution in Python:
Python
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
# Check if needle is an empty string
if not needle:
return 0
# Get the length of haystack and needle using the len() function
len_haystack = len(haystack)
len_needle = len(needle)
# Iterate through haystack with an index range up to (length of haystack - length of needle + 1)
# This is because if we start checking beyond this range, there aren't enough characters left
# in haystack to match the length of needle.
for i in range(len_haystack - len_needle + 1):
# Check the substring of haystack from index i to i + length of needle
if haystack[i:i+len_needle] == needle:
return i # Return the starting index if a match is found
# If no match is found after the loop ends, return -1
return -1
Explanation:
- Initial Check for Empty Needle:
- If
needle
is an empty string, by definition the function should return0
since an empty string is always considered to be found at the beginning of any string.
- If
- Length Calculation:
- Calculate the lengths of
haystack
andneedle
for convenience.
- Calculate the lengths of
- Iteration Through Haystack:
- Iterate through
haystack
from the start to the position where the remaining characters are fewer than the length ofneedle
. This range is calculated aslen_haystack - len_needle + 1
.
- Iterate through
- Substring Comparison:
- For each position
i
in the calculated range, extract a substring ofhaystack
fromi
toi + len_needle
and compare it withneedle
.
- For each position
- Return Index or -1:
- If the substring matches
needle
, return the current indexi
. - If no match is found after completing the loop, return
-1
.
- If the substring matches
Solution in Javascript:
JavaScript
/**
* @param {string} haystack
* @param {string} needle
* @return {number}
*/
var strStr = function(haystack, needle) {
// Check if needle is an empty string
if (!needle.length) {
return 0;
}
// Get the lengths of haystack and needle
const lenHaystack = haystack.length;
const lenNeedle = needle.length;
// Iterate through haystack with an index range up to (length of haystack - length of needle + 1)
// This is because if we start checking beyond this range, there aren't enough characters left
// in haystack to match the length of needle.
for (let i = 0; i <= lenHaystack - lenNeedle; i++) {
// Check the substring of haystack from index i to i + length of needle
if (haystack.substring(i, i + lenNeedle) === needle) {
return i; // Return the starting index if a match is found
}
}
// If no match is found after the loop ends, return -1
return -1;
};
Solution in Java:
Java
class Solution {
public int strStr(String haystack, String needle) {
// Check if needle is an empty string
if (needle.isEmpty()) {
return 0;
}
// Get the lengths of haystack and needle
int lenHaystack = haystack.length();
int lenNeedle = needle.length();
// Iterate through haystack with an index range up to (length of haystack - length of needle + 1)
// This is because if we start checking beyond this range, there aren't enough characters left
// in haystack to match the length of needle.
for (int i = 0; i <= lenHaystack - lenNeedle; i++) {
// Check the substring of haystack from index i to i + length of needle
if (haystack.substring(i, i + lenNeedle).equals(needle)) {
return i; // Return the starting index if a match is found
}
}
// If no match is found after the loop ends, return -1
return -1;
}
}
Solution in C#:
C#
public class Solution {
public int StrStr(string haystack, string needle) {
// Check if needle is an empty string
if (string.IsNullOrEmpty(needle)) {
return 0;
}
// Get the lengths of haystack and needle
int lenHaystack = haystack.Length;
int lenNeedle = needle.Length;
// Iterate through haystack with an index range up to (length of haystack - length of needle + 1)
// This is because if we start checking beyond this range, there aren't enough characters left
// in haystack to match the length of needle.
for (int i = 0; i <= lenHaystack - lenNeedle; i++) {
// Check the substring of haystack from index i to i + length of needle
if (haystack.Substring(i, lenNeedle) == needle) {
return i; // Return the starting index if a match is found
}
}
// If no match is found after the loop ends, return -1
return -1;
}
}