/* * @lc app=leetcode.cn id=28 lang=c * * [28] 实现strStr() * * https://leetcode-cn.com/problems/implement-strstr/description/ * * algorithms * Easy (37.86%) * Total Accepted: 38.6K * Total Submissions: 102K * Testcase Example: '"hello"\n"ll"' * * 实现 strStr() 函数。 * * 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 * (从0开始)。如果不存在,则返回 -1。 * * 示例 1: * * 输入: haystack = "hello", needle = "ll" * 输出: 2 * * * 示例 2: * * 输入: haystack = "aaaaa", needle = "bba" * 输出: -1 * * * 说明: * * 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 * * 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。 * */ int strStr(char* haystack, char* needle) { int i, j; int len1 = strlen(haystack); int len2 = strlen(needle); for(i = 0; i <= len1 - len2; i++){ for(j = 0; j < len2; j++){ if(haystack[i + j] != needle[j]){ break; } } if(j == len2) return i; } return -1; }
c语言自然是应用最最著名的kmp(看毛片)算法。
这个算法的理解可以参考:
https://www.cnblogs.com/yjiyjige/p/3263858.html
--------------------------------------------------------------------------------------------------------------------------
python:
# # @lc app=leetcode.cn id=28 lang=python3 # # [28] 实现strStr() # # https://leetcode-cn.com/problems/implement-strstr/description/ # # algorithms # Easy (37.86%) # Total Accepted: 38.6K # Total Submissions: 102K # Testcase Example: '"hello"\n"ll"' # # 实现 strStr() 函数。 # # 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 # (从0开始)。如果不存在,则返回 -1。 # # 示例 1: # # 输入: haystack = "hello", needle = "ll" # 输出: 2 # # # 示例 2: # # 输入: haystack = "aaaaa", needle = "bba" # 输出: -1 # # # 说明: # # 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 # # 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。 # # class Solution: def strStr(self, haystack: str, needle: str) -> int: l = len(needle) for i in range(len(haystack)-l+1): if haystack[i:i+l] == needle: return i return -1
python是真的简单,运用切片就能达到想要的目的了。