LeetCode[3] 最大字符不重复的子串

题目描述

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

即给定一个字符串,返回最长的没有重复字符的子串的长度


思路

用一个HashMap来存储字符串。其中key为字符,value为该字符在字符串中的位置。

使用两个指针i,j来指示最长子串的位置。刚开始i,j都为0,指向第一个字符。然后i开始向右遍历。若遍历到的字符已在HashMap中,则更新它的value为现在i的位置。并且将j指向该字符的下一个位置(j只能往右移,或者不移,不能左移)。若未在HashMap中,则将该字符以及它的位置放入HashMap中。最大的(i-j+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;
        for(int i=0,j=0;i<s.length();i++){
            if(map.containsKey(s.charAt(i))){
                j = Math.max(j,map.get(s.charAt(i))+1);
            }
            map.put(s.charAt(i),i);
            max = Math.max(max,i-j+1);
        }
        return max;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容