LeetCode 3- 无重复字符的最长子串
//给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 // 示例 1: //输入: s = "abcabcbb" //输出: 3 //解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 // // 示例 2: //输入: s = "bbbbb" //输出: 1 //解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 // // 示例 3: //输入: s = "pwwkew" //输出: 3 //解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 // 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 // // 示例 4: //输入: s = "" //输出: 0 // 提示: // 0 <= s.length <= 5 * 104 // s 由英文字母、数字、符号和空格组成 // // Related Topics 哈希表 双指针 字符串 Sliding Window // 👍 5360 👎 0 import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; //leetcode submit region begin(Prohibit modification and deletion) class Solution { public static int lengthOfLongestSubstring(String s) { if (StringUtils.isBlank(s)) { return 0; } int left = 0; int right = 0; int length = s.length(); int max = 0; Map<Character, AtomicInteger> char2Count = new HashMap(130); for (; right < length; right++) { char2Count.computeIfAbsent(s.charAt(right), o -> new AtomicInteger()).incrementAndGet(); while ( char2Count.get(s.charAt(right)).intValue() > 1) { char2Count.computeIfAbsent(s.charAt(left), o -> new AtomicInteger()).decrementAndGet(); left++; } if (right - left + 1 > max) { max = right - left + 1; } } return max; } } //leetcode submit region end(Prohibit modification and deletion)