无重复字符的最长子串
Posted top啦它
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无重复字符的最长子串相关的知识,希望对你有一定的参考价值。
leetcode 3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
class Solution
public int lengthOfLongestSubstring(String s)
Map<Character,Integer> map = new HashMap<>();
char[] chars = s.toCharArray();
if (chars.length <= 1) return chars.length;
int maxL = 0;
for (int i = 0,left = 0; i < chars.length; i++)
char aChar = chars[i];
map.put(aChar,map.getOrDefault(aChar,0)+1);
while (map.get(aChar)>1)
char aChar1 = chars[left++];
map.put(aChar1,map.get(aChar1)-1);
maxL = Math.max(maxL,i-left+1);
return maxL;
class Solution
public int lengthOfLongestSubstring(String s)
int length = s.length(),max=Integer.MIN_VALUE;
if (length<=1) return s.length();
Map<Character,Integer> map = new HashMap<>();
for (int left=0,right=0;right<length;right++)
char c = s.charAt(right);
if (map.containsKey(c))
left = Math.max(map.get(c)+1,left);
map.put(c,right);
max = Math.max(max,right-left+1);
return max;
以上是关于无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章