給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
class Solution { public int lengthOfLongestSubstring(String s) { if(s.length()<=1) { return s.length(); } int result=0; //通過哈希表來快速定位重復字符的最新位置 Map<Character,Integer> map = new HashMap<>(); //用快慢指針,快指針指向最新的下標,慢指針指向不重復的最小下標 int fast =0; int slow =0; while(fast<s.length()) { if(map.containsKey(s.charAt(fast))) { slow = Math.max(slow, map.get(s.charAt(fast))+1); } map.put(s.charAt(fast), fast); result = Math.max(result, fast-slow+1); fast++; } return result; } }