class Solution {
public:
int lengthOfLongestSubstring(string s) {
}
};
3. 无重复字符的最长子串
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成原站题解
python3 解法, 执行用时: 84 ms, 内存消耗: 15 MB, 提交时间: 2022-08-16 10:19:47
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
golang 解法, 执行用时: 12 ms, 内存消耗: 2.7 MB, 提交时间: 2021-07-17 17:11:47
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 }