算法(二)--无重复字符的最长子串

前言

仅记录学习笔记,如有错误欢迎指正。

题目

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

示例

输入: “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;
    }

猜你喜欢

转载自blog.csdn.net/njh1147394013/article/details/112257235