码迷,mamicode.com
首页 > 其他好文 > 详细

无重复字符的最长子串

时间:2020-07-27 09:51:04      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:toc   repo   port   repos   代码   sub   osi   substr   else   

无重复字符的最长子串

思路

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

代码

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;
    }
}

无重复字符的最长子串

标签:toc   repo   port   repos   代码   sub   osi   substr   else   

原文地址:https://www.cnblogs.com/realzhaijiayu/p/13382865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!