3. 无重复字符的最长子串
题目描述
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串
的长度。示例 1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是"abc"
,所以其长度为 3。示例 2:
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是"b"
,所以其长度为 1。示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
题解
使用hashmap和滑动窗口去实现
import java.util.HashMap;
class Solution {public int lengthOfLongestSubstring(String s) {int length=0;//使用hash表实现HashMap<Character,Integer> map=new HashMap<>();//将字符串转化为字符数组char[] str=s.toCharArray();//记录滑动窗口的起始指针int start=0;//记录滑动窗口的结束指针int end=0;for(;end<str.length;end++){if(map.containsKey(str[end])){//如果集合中有这个字母,更新起始位置到这个重复字母的下一位// 更新 start 为当前 start 和当前字符上次出现位置的下一个位置的最大值,防止指针往回走start = Math.max(start, map.get(str[end]) + 1);}//如果集合中没有这个字母,就加入到集合中map.put(str[end],end);length=Math.max(length,end-start+1);}return length;}
}