lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

1. 题目

 

 

2. 解法

思路:滑动窗口来遍历字符串

大致如下:

  • 定义一个哈希集合和两个指针,分别表示窗口内的字符和窗口的左右边界。
  • 定义一个变量,表示窗口的最大长度,也就是答案。
  • 从左到右遍历字符串,每次移动右指针,把它指向的字符加入到哈希集合中。
  • 如果哈希集合中已经存在这个字符,说明有重复,那么就移动左指针,把它指向的字符从哈希集合中删除,直到没有重复为止。
  • 每次移动指针后,更新最大长度,取它和当前窗口长度的较大值。
  • 当右指针到达字符串末尾时,返回最大长度。

 

具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public static int lengthOfLongestSubstring(String s) {
 
    if (s == null || s.length() == 0) {
        return 0;
    }
    int max = Integer.MIN_VALUE;
    int size = s.length();
 
    int start = 0, end = 0;
 
    HashSet<Character> set = new HashSet<>();
 
    for (int i = 0; i < size; i++) {
 
        char c = s.charAt(i);
 
        while (set.contains(c)) {
            set.remove(s.charAt(start));
            start++;
        }
 
        set.add(c);
        end++;
        max = Math.max(max, end - start);
 
    }
 
    return max;
}

  

3. 总结

posted on   白露~  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-04-28 深入JVM关闭与关闭钩子
2021-04-28 ShutdownHook - Java 优雅停机解决方案
2021-04-28 RocketMQ性能优化
2021-04-28 RocketMQ调优心得总结
2021-04-28 RocketMQ性能优化【实战笔记】
2021-04-28 RocketMQ在面试中那些常见问题及答案+汇总
2019-04-28 24种设计模式的通俗理解
点击右上角即可分享
微信分享提示