前言
仅记录学习笔记,如有错误欢迎指正。
题目
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例
输入: “abcabcbb”
-
输出: 3
-
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
思路
滑动窗口 里面全不为重复的字符串
时间复杂度:O(2n) = O(n),
空间复杂度:O(min(m, n)),
解法
直接两次for循坏遍历 找出两个值和下标
时间复杂度:O(n^2),空间复杂度:O(1),
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 = Math.max(left,map.get(s.charAt(i))+1);//下标从0开始,长度从1开始
}
map.put(s.charAt(i),i);
max = Math.max(max,i-left+1);
}
return max;
}