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

leetcode 3.无重复字符的最长字串(滑动窗口) (C++)DAY2

文章目录

  • 1.题目
    • 示例
    • 提示
  • 2.解答思路
  • 3.实现代码
    • 结果
  • 4.总结

1.题目

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

示例

示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。

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

提示

  • 0 <= s.length <= 5 * (10^4)
  • s 由英文字母、数字、符号和空格组成

2.解答思路

滑动窗口:

  • 滑动窗口主要应用在数组和字符串上。
  • 遍历一个序列时,可以类比成队列(只能队尾进队,对头出队),一个队头指针left,一个队尾指针right

针对本题分析

1.队头指针left,先固定,向右移动队尾指针right,直至出现重复的字符,计录下此时队列长度。
2.对头指针left向后移动直至没有重复字符出现,再插入此时的队尾指针right所指字符。
3.比较记录下的队列长度的最大值,就是无重复字符的最长字串长度。

3.实现代码

class Solution
{
public:
    int lengthOfLongestSubstring(string s)
    {
        int n = s.size();
        if (n == 0 || n == 1)
            return n;

        unordered_set<char> str; // 存放子串队列
        int maxLength = 0;       // 记录最大值
        int count = 0;           // 记录每次的子串长度

        // i是队头下标,j是队尾下标
        for (int i = 0, j = 0; j < n; j++)
        {
            auto p = str.find(s[j]);//判断队尾所指字符是否在子串内
            if (p == str.end()) // 在子串队列没有找到对应字符
            {
                str.insert(s[j]); // 添加字符到子串队列
                count++;          // 长度加1
            }
            else
            { // 在子串队列str找到了对应字符               
                while (p != str.end())
                {// 需要队头指针向后移直至队尾元素在子串中没有重复的字符
                    str.erase(s[i]);//删除对头下标对应字符
                    i++;//对头后移一位
                    count--;//子串字符长度减少一位
                    p=str.find(s[j]);//判断队尾所指元素是否在str中
                }
                str.insert(s[j]);//将队尾所指字符插入子串str
                count++;
            }

            if (count > maxLength)
                maxLength = count;
                
        }
        return maxLength;
    }
};

结果

在这里插入图片描述

4.总结

今天这题做了好长时间,cpu快烧干了,整个人都不好了。

知识储备还得多补充。。。

明天继续加油吧。


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

相关文章:

  • 【前端】Hexo 部署指南_hexo-deploy-git·GitHub Actions·Git Hooks
  • 解释 RESTful API,以及如何使用它构建 web 应用程序
  • 客户案例:向导ERP与金蝶云星空集成方案
  • iOS开发设计模式篇第二篇MVVM设计模式
  • WPF 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法
  • 【Unity】ScrollViewContent适配问题(Contentsizefilter不刷新、ContentSizeFilter失效问题)
  • 目标检测及相关算法介绍
  • 逆向基础-破解密码
  • spring boot打完jar包后使用命令行启动,提示xxx.jar 中没有主清单属性
  • Unity3D实现坦克大战
  • vue基本语法总结大全
  • 【算法与数据结构】583、72、LeetCode两个字符串的删除操作+编辑距离
  • 【图论】基环树
  • NuxtJs安装Sass后出现ERROR:Cannot find module ‘webpack/lib/RuleSet‘
  • 【从浅到深的算法技巧】排序应用,查找
  • 生物素 PEG4 甲基四嗪,Biotin-PEG4-methyltetrazine,用于标记、追踪和分离特定的分子或细胞
  • 【TCP/IP】用户访问一个购物网站时TCP/IP五层参考模型中每一层的功能
  • Python学习笔记(水桶谜题代码学习)——应用*符号解包列表所有元素传递给函数用法
  • LeetCode:2.两数相加
  • CentOS7集群环境搭建(3台)
  • 【git】本地项目推送到github、合并分支的使用
  • openssl3.2 - use openssl cmd create ca and p12
  • P8711 [蓝桥杯 2020 省 B1] 整除序列--2024冲刺蓝桥杯省一
  • Android消息通知Notification
  • http伪造本地用户字段系列总结
  • 将xyz格式的GRACE数据转成geotiff格式