前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无重复字符的最长子串

无重复字符的最长子串

原创
作者头像
ruochen
修改2021-11-21 14:54:14
4100
修改2021-11-21 14:54:14
举报
文章被收录于专栏:若尘的技术专栏

定义一个map数据结构存储(k,v),其中key值为字符,value值为字符位置+1,加1表示从字符位置后一个才开始不重复

  • 我们定义不重复子串的开始位置为start,结束位置为end
  • 随着end不断遍历向后,会遇到与【start,end】区间内字符相同的情况,此时将字符作为key值,获取其value值,并更新start,此时【start,end】区间内不存在重复字符
  • 无论是否更新start,都会更新其map数据结构和结果ans。
  • 时间复杂度:O(n)

代码:

代码语言:txt
复制
 public int lengthOfLongestSubstring(String s) {
代码语言:txt
复制
        int length=s.length();
代码语言:txt
复制
        int max=0;
代码语言:txt
复制
        //存放字符以及
代码语言:txt
复制
        Map<Character,Integer> map =new HashMap<>();
代码语言:txt
复制
        for (int start = 0,end=0; end <length ; end++) {
代码语言:txt
复制
            char element=s.charAt(end);
代码语言:txt
复制
            if (map.containsKey(element)){
代码语言:txt
复制
                //为了防止连续重复字符,这里要进行一次判断
代码语言:txt
复制
                //+1表示该元素后一个元素才是不重复字符串的开始
代码语言:txt
复制
                start=Math.max(map.get(element)+1,start);
代码语言:txt
复制
            }
代码语言:txt
复制
            max=Math.max(max,end-start+1);
代码语言:txt
复制
            //保存最后一个该结点的位置;
代码语言:txt
复制
            map.put(element,end);
代码语言:txt
复制
        }
代码语言:txt
复制
        return max;
代码语言:txt
复制
    }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档