无重复字符的最长子串

Posted realzhaijiayu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无重复字符的最长子串相关的知识,希望对你有一定的参考价值。

无重复字符的最长子串

思路

总体的思路是滑动窗口,可以借助哈希表将这些字符所在位置都记录起来,以便统计不重复子串的长度。

代码

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s == null || s.length() <= 0){
            return 0;
        }

        char[] strs = s.toCharArray();
        //把这些字符出现的位置存储在哈希表中
        Map<Character, Integer> Position = new HashMap<>();
        for(char c : s.toCharArray()){
            Position.put(c, -1);
        }

        int maxLen = 0;
        int curLen = 0;
        for(int i = 0; i < s.length(); i++){
            //prePos是该字符上次出现的位置
            int prePos = Position.get(strs[i]);
            //如果没有出现过或者新出现的字符能够使用这个不重复序列增长
            if(prePos < 0 || i - prePos > curLen){
                curLen++;
            }
            else{
                maxLen = Math.max(maxLen, curLen);
                curLen = i - prePos;
            }
            Position.put(strs[i], i);
        }
        maxLen = Math.max(maxLen, curLen);
        return maxLen;
    }
}

以上是关于无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章

3. 无重复字符的最长子串

符串的最长无重复字符的子串长度

算法--最长无重复字符子串

Leetcode 3.无重复字符的最长子串(带图)

无重复字符的最长子串

无重复字符的最长子串