美文网首页
最大连续子串的长度-动态规划

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

作者: MoneyRobber | 来源:发表于2019-05-24 16:05 被阅读0次

描述

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

输入:"bbbbb"
输出:1

输入:"pwwkew"
输出:3

思路

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


  • n表示源字符串的下标
  • sum(n)表示以n为结尾的字符串的最大不重复子串的长度
  • m(n)表示下标为n对应的字符,并且以该字符为结尾的最大连续子串
  • 如果n出现在m(n-1),sum(n) = n - f(n),f(n)表示n出现在m(n-1)中对应的下标
  • 如果n没有出现在m(n-1),sum(n) = sum(n-1) + 1
  • 令max(n)表示最终结果,max(n) = max(sum(n),sum(n-1)...sum(0))

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)

  • 把遍历过的字符存储到字典里面,key为字符,value为字符对应的下标,采用字典的数据结构是因为,字典的存取都为O(1)
  • 定义变量 j 标记上一个最大连续子串的开始下标,用来做状态转移

相关文章

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

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

  • 【Leetcode】【Python】53Maximum Suba

    问题描述: 求解最大连续子串 代码示例:动态规划

  • Longest Palindrome Substring

    问题 求最长回文子串 思路 如果考虑O(n)的动态规划,比如用f(i)来代表以当前位置为结尾的回文子串的最大长度,...

  • 动态规划(最大乘积连续子串和最大和连续子串)

    Maximum Subarray:https://leetcode.com/problems/maximum-su...

  • 字符串

    1 最长无重复字符子串 2 最长上升子序列(动态规划) 3 最长公共子序列的长度(动态规划) 4 对于一个字符串,...

  • Java求最大相同子串

    利用动态最大相同子串规划求 ``` public class maxString { public static ...

  • 回文子串个数

    注意子串和子序列的区别子串:必须连续子序列:可以不连续两者都可以包含字符串本身 解法一:暴力求解 解法二:动态规划

  • 516. 最长回文子序列

    子串代表连续,子序列不代表连续求子串利用左右指针,求子序列需要利用动态规划其中dp[i][j]代表从i到j的字符从...

  • DP经典问题代码

    斐波那契数列 (动态规划的递归写法) 数塔问题 (动态规划的递推写法) 最大连续子序列和 最长不下降子序列 最长公...

  • 第八届蓝桥杯 最大公共子串 Java A组

    标题:最大公共子串 最大公共子串长度问题就是:求两个串的所有子串中能够匹配上的最大长度是多少。 比如:"abcdk...

网友评论

      本文标题:最大连续子串的长度-动态规划

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