当前位置:网站首页>【题目】无重复字符的最长子串

【题目】无重复字符的最长子串

2022-08-11 11:38:00 xiaoxigua_cs

题目描述

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

示例1

输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3

示例2

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

解题代码

public class Test {
    
    public static void main(String[] args) {
    
        int result = lengthOfLongestSubstring("aabaab!bb");
        System.out.println(result);
    }

    /** * 计算字符串中最大不重复的字符串 */
    public static int lengthOfLongestSubstring(String s) {
    
        Map<Character, Integer> eMap = new HashMap<>(16);

        //定义一个游标,用来标识队列的起始位置
        int cursor = 0;

        //最大不重复的字符串
        int maxLength = 0;

        for (int i = 0; i < s.length(); i++) {
    
            char c = s.charAt(i);

            //字符重复了,需要将游标指向重复的第一个字符 +1
            if (eMap.containsKey(c)) {
    
                cursor = Math.max(cursor, eMap.get(c) + 1);
            }

            eMap.put(c, i);
            //因为数组是从0开始的,所以需要 +1
            maxLength = Math.max(maxLength, i - cursor + 1);
        }

        return maxLength;
    }
}

题目来源

力扣-无重复字符的最长子串

原网站

版权声明
本文为[xiaoxigua_cs]所创,转载请带上原文链接,感谢
https://xiaoxigua.blog.csdn.net/article/details/126252360