实现 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 { func strStr(_ haystack: String, _ needle: String) -> Int { if needle.isEmpty{ return 0 } //为了解决超长字符串提高性能,比如haystack 30000个a 加个a,needle 30000个a 加个b if haystack.count == needle.count { if haystack.last != needle.last { return -1 } } if haystack.contains(needle){ let fullNameArr = haystack.components(separatedBy:needle) return fullNameArr[0].count; } return -1 } }
滑动窗口原理:
class Solution { func strStr(_ haystack: String, _ needle: String) -> Int { //! 根据题意 排除异常:needle为空,优先返回0 if needle.count == 0 { return 0 } if haystack.count == 0 { return -1 } if needle.count > haystack.count { return -1 } for i in 0...haystack.count - needle.count { let start = haystack.index(haystack.startIndex, offsetBy: i) let end = haystack.index(start, offsetBy: needle.count) //滑动窗口里的字符串 let tempStr = haystack[start..<end] if tempStr == needle { return i } } return -1 } }