zoukankan      html  css  js  c++  java
  • 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
        }
    }
  • 相关阅读:
    PCI 设备详解二
    PCI 设备详解一
    SKBUFFER详解
    windows中的进程和线程
    sVIrt概述
    qemu网络虚拟化之数据流向分析二
    在VC6的debug框里面输出版权信息
    [yii]Trying to get property of non-object
    yii使用CFrom调用ajax失败的记录
    VC代码生成里面的/MT /MTd /MD /MDd的意思
  • 原文地址:https://www.cnblogs.com/huangzs/p/13745385.html
Copyright © 2011-2022 走看看