前言
仅记录学习笔记,如有错误欢迎指正。
题目
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例
输入: “abcabcabcde”
-
输出: 5
-
解释: 因为无重复字符的最长子串是 "abcde",所以其长度为 5。
思路
滑动窗口 里面全不为重复的字符串
时间复杂度:O(2n) = O(n),
空间复杂度:O(min(m, n)),
解法
public class Solution {
public int lengthOfLongestSubString(String s){
if (s.length()==0) return 0;
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
int max = 0;
int left = 0;
//循坏去找其他重复的字段 对比
for(int i = 0; i < s.length();i++){
//left 是重复的长度
if (map.containsKey(s.charAt(i))) {
//注意left这里取的是第一次出现的值,而不是第二个后出现的重复值
left = Math.max(left,map.get(s.charAt(i))+1);
}
map.put(s.charAt(i),i);
max = Math.max(max,i-left+1);
}
return max;
}
如果需要显示字符串:
String s1=s.substring(left,left+max);