剑指 Offer 48. 最长不含重复字符的子字符串
题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 中等
方法:动态规划 时间复杂度O(n) 空间复杂度O(n)
本题可以采用动态规划,记录以当前末尾字符为结尾的最长不重复子字符串长度。
需要使用一个哈希表来记录某一字符上一次出现的index dic[s[ i ]] = i
对于新进字符,如果没出现过,则dp[i] = dp[i-1] + 1,如果出现过,但在 i - dic[s[i]] > dp[i-1],说明出现在dp[i-1]的范围外,同样 dp[i] = dp[i-1] + 1,否则dp[i] = i - dic[s[i]]
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ dic = {} res = tmp = 0 for i in range(len(s)): if s[i] in dic: tmp = tmp + 1 if i - dic[s[i]] > tmp else i - dic[s[i]] else: tmp += 1 dic[s[i]] = i res = max(res,tmp) return res

浙公网安备 33010602011771号