当前位置: 首页 > article >正文

Leetcode 3 Longest Substring Without Repeating Characters

题意

给定一个字符串,求出最长的无重复字符的子串

题目链接

https://leetcode.com/problems/longest-substring-without-repeating-characters/description/

题解

可以用滑动窗口来解决问题,因为在这道题中窗口的左端点不会向左回退

滑动窗口模板

int l = 0;
int r = 0;
while( r < 滑动窗口的右端点) {
	更新窗口元素(一般跟r有关);
	r++;
	while( 窗口中的元素不满足条件){
		更新窗口(一般跟l有关);
		 l++;
	}
}
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int l = 0;
        int r = 0;
        unordered_map<char, int> mp;
        int ret = 0;
        while(r < s.size()) {
            mp[s[r]]++;
            r++;
            while( mp[s[r-1]] > 1) {
                mp[s[l]]--;
                l++;
            }
            ret = max(ret, r - l);
        }
        return ret;
    }
};

这里需要注意的是由于r++在前面,而我们判断的时候是当前的窗口的最后一个字符是否出现了不止一次,当前的数组下标是r-1, 而且计算长度的时候正常是r-l+1,但由于少了r先++了,计算的时候应该用r-l
事件复杂度: O ( n ) O(n) O(n) n为字符串的长度
空间复杂度: O ( n ) O(n) O(n) 需要存储一个map,字符和个数的hashmap


http://www.kler.cn/a/593270.html

相关文章:

  • 拓扑排序——117. 软件构建
  • AUTOSAR_DoIP_Detailed
  • [蓝桥杯 2023 省 B] 飞机降落(不会dfs的看过来)
  • Numpy科学计算库笔记
  • 小红书不绑定手机号会显示ip吗
  • 新能源汽车技术赋能自动化物流仓库的技术普及方案
  • 教材征订管理系统基于Spring Boot-SSM
  • 【pyCharm Git】根据dev分支新建dev_y分支,本地也新建dev_y分支,并将代码提交到Gitlab上的新分支dev_y上。
  • Postman——Body的类型
  • Gemini分析屏幕截图时,如何处理图像模态(如界面元素、文字内容)与文本模态(用户指令)的语义对齐?
  • 网络安全之前端学习(HTML篇)
  • Linux 环境中安装 MySQL 8.0 的 Docker 部署详细步骤
  • 点击劫持详细透析
  • HTTPS建立连接过程
  • 【C++】详讲:匿名对象、友元
  • 山寨币ETF的叙事,不灵了?
  • Qt窗口控件之文件对话框QFileDialog
  • 用 pytorch 从零开始创建大语言模型(四):从零开始实现一个用于生成文本的GPT模型
  • 备赛蓝桥杯之第十六届模拟赛3期职业院校组
  • LeetCode 热题 100_跳跃游戏(78_55_中等_C++)(贪心算法)