From 52e39dafb4dd23eba3da6325cc98964a82363228 Mon Sep 17 00:00:00 2001 From: zeek <984294471@qq.com> Date: Tue, 7 Apr 2020 19:50:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E9=95=BF=E5=AD=90=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/string/LengthOfLongestSubString.java | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/string/LengthOfLongestSubString.java diff --git a/src/string/LengthOfLongestSubString.java b/src/string/LengthOfLongestSubString.java new file mode 100644 index 0000000..79fa5ff --- /dev/null +++ b/src/string/LengthOfLongestSubString.java @@ -0,0 +1,35 @@ +package string; + +import java.util.HashSet; +import java.util.Set; + +/** + * @apiNote 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 + * 示例 1: + * 输入: "abcabcbb" + * 输出: 3 + * 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 + * + * @author zeekling + * @version 1.0 + * @date 2020-04-07 + */ +public class LengthOfLongestSubString{ + + public int lengthOfLongestSubstring(String s) { + int n = s.length(); + Set set = new HashSet<>(); + int ans = 0, i = 0, j = 0; + while (i < n && j < n) { + // try to extend the range [i, j] + if (!set.contains(s.charAt(j))){ + set.add(s.charAt(j++)); + ans = Math.max(ans, j - i); + } + else { + set.remove(s.charAt(i++)); + } + } + return ans; + } +}