LeetCode程序员面试题之无重复字符的最长子串

作者:97的风 时间:2021-09-12 05:26:36 

1.简述:

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"

输出: 1

解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"

输出: 3

解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

2.代码实现:

class Solution {
public int lengthOfLongestSubstring(String s) {
// 哈希集合,记录每个字符是否出现过
Set<Character> occ = new HashSet<Character>();
int n = s.length();
// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
int rk = -1, ans = 0;
for (int i = 0; i < n; ++i) {
if (i != 0) {
// 左指针向右移动一格,移除一个字符
occ.remove(s.charAt(i - 1));
}
while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
// 不断地移动右指针
occ.add(s.charAt(rk + 1));
++rk;
}
// 第 i 到 rk 个字符是一个极长的无重复字符子串
ans = Math.max(ans, rk - i + 1);
}
return ans;
}
}

来源:https://blog.51cto.com/u_15488507/6036041

标签:Java,最长子串
0
投稿

猜你喜欢

  • Java中的synchronized关键字

    2023-07-28 18:39:26
  • SpringBoot如何使用自定义注解实现接口限流

    2023-11-25 07:22:37
  • Java SpringBoot整合SpringCloud

    2022-11-11 15:07:46
  • 解析Java和Eclipse中加载本地库(.dll文件)的详细说明

    2023-11-11 01:23:31
  • Spring interceptor拦截器配置及用法解析

    2023-06-26 06:08:15
  • 详解Spring Boot 定制HTTP消息转换器

    2023-11-24 20:20:51
  • Springmvc发送json数据转Java对象接收

    2023-07-07 16:26:16
  • 让Java后台MySQL数据库能够支持emoji表情的方法

    2022-12-30 04:24:45
  • 200行java代码实现2048小游戏

    2023-11-29 12:03:57
  • Unity Shader实现黑幕过场效果

    2022-01-13 00:18:10
  • MyBatis中的模糊查询语句

    2022-09-30 03:36:59
  • Java 由浅入深带你掌握图的遍历

    2022-05-21 07:21:44
  • Java实现将类数据逐行写入CSV文件的方法详解

    2023-02-27 17:11:11
  • 线程局部变量的实现 ThreadLocal使用及场景介绍

    2023-11-10 03:19:26
  • JPA多数据源分布式事务处理方案

    2023-08-09 03:50:06
  • java内部类原理与用法详解

    2022-12-04 14:41:25
  • Java泛型映射不同的值类型详解及实例代码

    2023-07-29 00:20:52
  • Mybatis下的SQL注入漏洞原理及防护方法解析

    2022-06-30 18:38:29
  • 25行Java代码将普通图片转换为字符画图片和文本的实现

    2023-11-24 02:04:26
  • java 动态 代理的方法总结

    2023-08-25 04:00:33
  • asp之家 软件编程 m.aspxhome.com