美文网首页
LeetCode之路(swift) - 给定一个字符串,找出不含

LeetCode之路(swift) - 给定一个字符串,找出不含

作者: echo海猫 | 来源:发表于2018-05-31 11:20 被阅读74次

    题目:
    给定一个字符串,找出不含有重复字符的最长子串的长度。
    示例:
    (1)给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
    (2)给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
    (3)给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。

            func lengthOfLongestSubstring(_ s: String) -> Int {
    
                var ans:Int = 0
                let n = s.count
                var letters = Set<Character>()
                var result = [Int]()
    //检测数组中是否包含一个数大于了字符串长度的一半,这样可以减少时间复杂度,定一个Bool值
                var isJumpToEnd = false
    
                for i in 0..<n {
                    letters.removeAll()
                    let index = s.index(s.startIndex, offsetBy: i)
                    letters.insert(s[index])
                    if isJumpToEnd {
                        break;
                    }
                    for j in i+1...n {
                        let index2 = s.index(s.startIndex, offsetBy: j)
    //采用集合的形式,每次从字符串取出一个字符,便做一次查询,没有就加进去,有的话就记录数值,加入数组,然后开启下一次循环
                        if letters.contains(s[index2]) {
                            ans = j - i
                            result.append(ans)
                            if ans >= n/2 {
                                isJumpToEnd = true
                            }
                            break
                        }else{
                            letters.insert(s[index2])
                        }
                    }
                }
    
                var max:Int = result[0]
                for index in 0..<result.count {
    
                    if result[index] > max {
                        max = result[index]
                    }
                }
                return max
            }
    

    以上答案纯属个人答案,在LeetCode提答案时,报错:超出范围,检测目前的循环没找到越界,暂时不提了,等再优化看看
    简单描述下个人思路:

    1、利用集合Set去对字符串中的每一个Character进行操作,不同的进行保存,直到碰到相同元素,计算此时字符串最大长度
    2、两次for...in遍历字符串,进行添加集合的Character对比
    3、将每次记录的字符串最大长度保存在一个数组中,然后从数组中找寻一个最大的值,即为字符串的最大长度返回即可
    ps:检测数组中是否包含一个数大于了字符串长度的一半,这样可以减少时间复杂度,定一个Bool值 isJumpToEnd             
    

    利用LeetCode平台继续深入学习swift的语法部分,继续加油了!
    写的不好,请指教!

    相关文章

      网友评论

          本文标题:LeetCode之路(swift) - 给定一个字符串,找出不含

          本文链接:https://www.haomeiwen.com/subject/dzfqsftx.html