当前位置:网站首页>LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
2022-08-03 09:06:00 【InfoQ】
欢迎访问我的GitHub
- 本文是《LeetCode第三题(Longest Substring Without Repeating Characters)三部曲》的第二篇,前一篇文章已经列出了完整的解题思路,今天来将此思路转化为具体的Java代码;
关键变量
- 编码之前先确定几个关键变量:
- 当前窗口中的元素都是不重复的,适合用一个HashSet来保存;
- max变量记录最长子串的长度;
- left表示窗口左侧相对整个字符串的位置,right表示窗口右侧相对整个字符串的位置,如下图:
代码实现
- 以下是代码,关键位置都有详细注释:
public class Solution1 {
public int lengthOfLongestSubstring(String s) {
//窗口的起始位置,窗口的结束为止,最长记录
int left = 0, right = 0, max = 0;
//表示窗口内有哪些值
Set<Character> set = new HashSet<>();
while (right < s.length()) {
//例如"abcdc",窗口内是"abcd",此时right等于[4],
//发现窗口内有array[right]的值,就缩减窗口左边,
//缩到窗内没有array[right]的值为止,
//当left一路变大,直到left=3的时候,窗口内已经没有array[right]的值了
if (set.contains(s.charAt(right))) {
//假如窗口内是"abc",当前是"c",那么下面的代码只会将"a"删除,left加一,再次循环
//而新一次循环依旧发现"c"还在set中,就再把"b"删除,left再加一...
set.remove(s.charAt(left++));
} else {
//窗口内没有array[right]的时候,就把array[right]的值放入set中,表示当前窗口内有哪些值
set.add(s.charAt(right++));
if ((right - left) > max) {
max = right - left;
}
}
}
return max;
}
public static void main(String[] args) {
System.out.println(new Solution1().lengthOfLongestSubstring("abcabcbb"));
}
}
- 上述代码的关键是set.remove(s.charAt(left++)),配合着外面的while循环,"left++"表示将窗口向右移动一个元素,并且将窗口中最左侧的元素从set中删除;
- 上述代码在LeetCode上提交成功,不过运行时间超过40ms,成绩并不理想,接下来的文章我们一起来做优化提升速度;
欢迎关注InfoQ:程序员欣宸
边栏推荐
- gpnmb+ gpnmb-AT2 cell空转映射 上皮细胞的空转映射
- LeetCode 每日一题——622. 设计循环队列
- The display of the article list and the basics of creating articles and article details
- HCIP练习(OSPF)
- MySQL数据库————数据库与vs的连接
- 好用的插件
- English Grammar - Adverbial Clauses
- 【TPC-DS】25张表的详细介绍,SQL的查询特征
- 基于二次型性能指标的燃料电池过氧比RBF-PID控制
- uniapp swiper 卡片轮播 修改指示点样式效果demo(整理)
猜你喜欢

IDEA的database使用教程(使用mysql数据库)

Rabbit and Falcon are all covered, Go lang1.18 introductory and refined tutorial, from Bai Ding to Hongru, the whole platform (Sublime 4) Go lang development environment to build EP00

多媒体数据处理实验2:PCA

STP生成树选举结果查看及验证

110 MySQL interview questions and answers (continuous updates)

响应式布局经典范例——巨幅背景大标题

删除文件夹时,报错“错误ox80070091:目录不是空的”,该如何解决?

STP普通生成树安全特性— bpduguard特性 + bpdufilter特性 + guard root 特性 III loopguard技术( 详解+配置)

【论文笔记】基于动作空间划分的MAXQ自动分层方法

【愚公系列】2022年07月 Go教学课程 026-结构体
随机推荐
redis键值出现 xacxedx00x05tx00&的解决方法
软体按摩机器人驱动器的设计与仿真
HCIP练习(OSPF)
Add Modulo 10 (规律循环节,代码实现细节)
Exception: Dataset not found. Solution
Network LSTM both short-term and long-term memory
基于百度AI和QT的景物识别系统
NFT到底有哪些实际用途?
多线程下的单例模式
国内IT市场还有发展吗?有哪些创新好用的IT运维工具可以推荐?
015-Balanced binary tree (1)
LINGO 18.0软件安装包下载及安装教程
Redis集群概念与搭建
编程踩坑合集
dflow部署简记
Industry SaaS Microservice Stability Guarantee Actual Combat
CSP-S2019 Day2
bihash总结
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
多媒体数据处理实验3:图像特征提取与检索
