最大连续子串的长度-动态规划

2019-05-24  本文已影响0人  MoneyRobber

描述

字符串的最大连续子串的长度,子串不能有重复字符,例如
输入:"abcabcbb"
输出:3

输入:"bbbbb"
输出:1

输入:"pwwkew"
输出:3

思路

使用动态规划来解决问题,先找到状态转移方程


Code

class Solution {
    func lengthOfLongestSubstring(_ s: String) -> Int {
        if s.count == 0 {
            return 0
        }
        
        var sum = 0
        var maxSum = 0
        var dic:[Character:Int] = [:]
        var i = 0
        var j = 0
        for c in s {
            if dic[c] == nil {
                sum = sum + 1
            } else {
                let val = dic[c]!
                if val >= j {
                    sum = i - val
                    j = val + 1
                } else {
                    sum = sum + 1
                }
            }
            dic[c] = i
            i = i+1
            maxSum = max(maxSum, sum)
        }
        return maxSum
    }
}

代码分析

时间复杂度O(n)

上一篇下一篇

猜你喜欢

热点阅读