LeetCode实现 strStr()Swift

实现 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
    }
}
原文地址:https://www.cnblogs.com/huangzs/p/13745385.html