class Solution {
public:
int lengthOfLongestSubstring(string s) {
}
};
剑指 Offer 48. 最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
提示:
s.length <= 40000
注意:本题与主站 3 题相同:https://leetcode.cn/problems/longest-substring-without-repeating-characters/
原站题解
golang 解法, 执行用时: 8 ms, 内存消耗: 2.6 MB, 提交时间: 2022-11-14 10:36:11
func lengthOfLongestSubstring(s string) int { mp := map[byte]int{} n := len(s) rk, ans := -1, 0 for i := 0; i < n; i++ { if i > 0 { delete(mp, s[i-1]) // 移除掉最左侧的字符 } for rk + 1 < n && mp[s[rk+1]] == 0 { mp[s[rk+1]]++ rk++ } ans = max(ans, rk-i+1) } return ans } func max(x, y int) int { if x > y { return x } return y }
python3 解法, 执行用时: 80 ms, 内存消耗: 15.2 MB, 提交时间: 2022-11-14 10:35:24
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: mp = defaultdict(int) n = len(s) rk, ans = -1, 0 for i in range(n): if i > 0: del mp[s[i-1]] while rk + 1 < n and mp[s[rk+1]] == 0: mp[s[rk+1]] += 1 rk += 1 ans = max(ans, rk-i+1) return ans