当前位置:网站首页>剑指offer 48:最长不重复子串
剑指offer 48:最长不重复子串
2022-07-30 07:42:00 【勇敢小姚】
题目描述:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解法一:滑动窗口
思路:
首先,left和right同时指向窗口头部,右窗口不断右移动,用Set维护一个不重复的滑动窗口,当遇到重复元素,即刻移动左窗口,去重,同时记录此时窗空口的长度。然后重复前述步骤,直到窗口遍历完全部元素。
代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
int res = 0;
Set<Character> set = new HashSet<>();
for(int l = 0, r = 0; r < s.length(); r++) {
char c = s.charAt(r);
while(set.contains(c)) {
set.remove(s.charAt(l++));
}
set.add(c);
res = Math.max(res, r - l + 1);
}
return res;
}
}解法二:双端队列
思路:
用一个双端队列当成滑动窗口,当遇到队列中已经存在的数,就从队头开始删(直到删除这个存在的数),否则就从队尾添加元素
代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
Deque<Character> deque = new ArrayDeque<>();
int max=0;
for (int i = 0; i < s.length(); i++) {
if (!deque.contains(s.charAt(i))) {
deque.addLast(s.charAt(i));
}else {
max = Math.max(max, deque.size());
while(deque.peekFirst()!=s.charAt(i)) {
deque.removeFirst();
}
deque.removeFirst();
deque.addLast(s.charAt(i));
}
}
max = Math.max(max, deque.size());
return max;
}
}
边栏推荐
猜你喜欢

C# uses RestSharp to implement Get, Post requests (2)

【无标题】

typescript6 - simplify the steps to run ts

【Kotlin 中的类和继承】

SwiftUI SQLite 教程之 构建App本地数据库实现创建、读取、更新和删除(教程含完成项目源码)

typescript4-安装编译ts的工具包

Thinking about digital transformation of construction enterprises in 2022, the road to digital transformation of construction enterprises

用代码收集每天热点内容信息,并发送到自己的邮箱

Leetcode 2.两数相加 两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的。

typescript7-typescript common types
随机推荐
【COCI 2020/2021 Round #2 D】Magneti (DP)
What convenience does the RFID fixed asset inventory system bring to enterprises?
你好,我的新名字叫 “铜锁 / Tongsuo”
C13—使用innosetup工具制作软件安装向导2022-07-23
桌面软件开发框架大赏
【Flask框架①】——Flask介绍
Kubernetes 在科技革命中的演变
sql注入数据库原理详解
【sleuth + zipkin 服务链路追踪】
ES:解构
Hands-on teaching OneOS FOTA upgrade
jdbc ResultSetMetaData获取tableName问题
JS中如何阻止事件冒泡和默认行为
[Mini Program Column] Summarize the development specifications of uniapp to develop small programs
typescript7-typescript common types
潜心打磨,主动求变——这群技术排头兵,如何做好底层开发这件事?
Common configuration
Gorm 更新零值问题
typescript3-ts对比js的差别
数据库连接池的使用