diff --git a/滑动窗口/1. 无重复字符的最长子串.md b/滑动窗口/1. 无重复字符的最长子串.md new file mode 100644 index 0000000..878c880 --- /dev/null +++ b/滑动窗口/1. 无重复字符的最长子串.md @@ -0,0 +1,70 @@ +# 无重复字符的最长子串 + +## 题目 + +给定一个字符串 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 由英文字母、数字、符号和空格组成 + + +## 思路 + +- 滑动窗口 + - 区间 + - 不重复子串 + - 维护 + - 哈希表 + - `HashMap` + +## 代码 + +```java +class Solution { + public int lengthOfLongestSubstring(String s) { + // Init + int l = 0, r = 0; + Map map = new HashMap<>(); + int ans = 0; + + // Traverse + for (; r < s.length(); r++) { + char cur = s.charAt(r); + // EXIST + if (map.containsKey(cur)) { + l = map.get(cur); + ans = Math.max(ans, r - l); + l++; + map.put(cur, r); + } + // NOT EXIST + else { + map.put(cur, r); + } + } + return ans; + } +} +``` \ No newline at end of file