Leetcode 每日一题 3.无重复字符的最长子串

server/2024/11/27 23:24:51/

目录

问题描述

输入输出格式

示例

滑动窗口算法步骤

通过图片

代码实现

复杂度分析

题目地址

注意事项


问题描述

给定一个字符串 s,我们需要找出其中不含有重复字符的最长子串的长度。子串是指字符串中连续的字符序列,而子序列则是字符序列,但不必连续。

输入输出格式

  • 输入:一个字符串 s
  • 输出:一个整数,表示最长不含有重复字符的子串的长度。

示例

  1. 输入:s = "abcabcbb",输出:3(最长子串为 "abc")。
  2. 输入:s = "bbbbb",输出:1(最长子串为 "b")。
  3. 输入:s = "pwwkew",输出:3(最长子串为 "wke")。

滑动窗口算法步骤

  1. 初始化:使用一个哈希集合(HashSet)来存储当前窗口内的字符,两个指针 left 和 right 分别表示窗口的左右边界,以及一个变量 maxLen 来记录最长子串的长度。
  2. 扩展窗口:移动 right 指针向右扩展窗口,直到遇到重复的字符。
  3. 处理重复:如果遇到重复字符,移动 left 指针向右,直到窗口内没有重复字符。
  4. 更新最长长度:在每次移动 right 指针后,更新 maxLen,它等于当前窗口的长度,即 right - left + 1
  5. 返回结果:遍历结束后,maxLen 将包含最长不重复子串的长度。

通过图片

代码实现

 

java

import java.util.HashSet;
import java.util.Set;class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> set = new HashSet<>();int maxLen = 0; // 存储最长子串的长度int left = 0; // 左指针for (int right = 0; right < s.length(); right++) {// 如果当前字符已经在窗口中,移动左指针直到窗口内没有重复字符while (set.contains(s.charAt(right))) {set.remove(s.charAt(left));left++;}// 将当前字符加入窗口set.add(s.charAt(right));// 更新最长子串长度maxLen = Math.max(maxLen, right - left + 1);}return maxLen;}
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串 s 的长度。每个字符最多被访问两次(一次是 right 指针的移动,一次是 left 指针的移动)。
  • 空间复杂度:O(min(m, n)),其中 m 是字符集的大小。在最坏的情况下,我们需要存储所有字符,这取决于字符集的大小。

题目地址

3. 无重复字符的最长子串 - 力扣(LeetCode)

注意事项

  • 确保在移动 left 指针时,从 set 中移除对应的字符。
  • 在每次循环中,都更新最长子串的长度,以确保我们得到全局的最长子串。

现实案例分析:文本编辑器中的自动补全

背景

自动补全功能是现代文本编辑器和IDE的标准配置,它能够根据用户的输入提供单词或代码片段的补全建议。这个功能的核心挑战在于如何快速准确地识别出用户可能想要的补全项,同时确保这些建议是唯一的,避免重复。

问题挑战

在代码补全过程中,一个常见的问题是如何处理用户输入的连续代码片段。例如,当用户输入“system.out.println”时,编辑器需要能够识别出这是一个整体的代码片段,而不是将其拆分为“system.out”和“println”两个独立的部分。

解决方案

利用“无重复字符的最长子串”算法,我们可以有效地识别出用户输入中的最长连续无重复字符序列。这可以帮助我们确定最合适的补全建议,从而提供更准确的自动补全功能。


http://www.ppmy.cn/server/145465.html

相关文章

FastDFS基础概述与系统架构详解

目录 一、FastDFS简介二、FastDFS系统架构1. 跟踪服务器&#xff08;Tracker Server&#xff09;2. 存储服务器&#xff08;Storage Server&#xff09;3. 客户端&#xff08;Client&#xff09; 三、FastDFS功能逻辑分析1. 文件上传&#xff08;Upload File&#xff09;原理2.…

如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南

动态链接库&#xff08;DLL&#xff09;文件是Windows操作系统中非常重要的一部分&#xff0c;它们包含了程序运行所需的代码和数据。当系统提示DLL文件丢失时&#xff0c;可能会导致应用程序无法正常运行。以下是一些安全高效地打开和管理DLL文件以及修复DLL丢失问题的方法&am…

常见面试题----深入源码理解MQ长轮询优化机制

引言 在分布式系统中&#xff0c;消息队列&#xff08;Message Queue, MQ&#xff09;扮演着至关重要的角色。MQ不仅实现了应用间的解耦&#xff0c;还提供了异步消息处理、流量削峰等功能。而在MQ的众多特性中&#xff0c;长轮询&#xff08;Long Polling&#xff09;机制因其…

[自动化]获取每次翻页后的页面 URL

from DrissionPage import ChromiumPage page ChromiumPage() page.get(热门项目 - Gitee.com) page.listen.start(gitee.com/explore) for i in range(5): page("relnext").click() res page.listen.wait() print(res.url) 这段代码使用了DrissionPage库中的Chromi…

C#基础46-50

46.数组x中有n个数&#xff0c;求出奇数的个数cn1和偶数的个数cn2以及数组x下标为偶数的元素值的算术平均值pj&#xff08;保留2位小数&#xff09;。结果cn1,cn2,pj输出到控制台。 47.求出10000以下符合条件的自然数。条件是&#xff1a;千位数字与百位数字之和等于十位数字与…

基于DVB-T的COFDM+16QAM+LDPC图传通信系统matlab仿真,包括载波同步,定时同步,信道估计

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 图传测试&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理…

蓝桥杯每日真题 - 第23天

题目&#xff1a;&#xff08;直线&#xff09; 题目描述&#xff08;12届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目理解: 在平面直角坐标系中&#xff0c;从给定的点集中确定唯一的直线。 两点确定一条直线&#xff0c;判断两条直线是否相同&#xff0c;可通过…

IDEA隐藏文件或文件夹

1.问题来源 idea开发springboot项目时&#xff0c;有时会有很多额外的包或文件出现&#xff0c;如.iml、.idea、build等。这些包对业务代码开发没有任何影响&#xff0c;但影响idea项目结构效果&#xff0c;看起来很不舒服&#xff0c;这就可以使用改设置&#xff0c;屏蔽这些文…