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

hot100滑动窗口无重复字符串

题目链接:

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

题目的要求是让我们找到字符串中的最长字符串,这个很显然我们首先想到暴力解法,列举所有的字符串找到不重复的,我们在此思路上优化算法进行滑动窗口的优化。

首先先来一下暴力解法直接枚举所有的字符串:

先来枚举所有的子字符串然后利用map进行判断是否有重复字符串,进行长度的计算。

求得最大的len。显然结果超时。

 int lengthOfLongestSubstring(string s) {vector<string> substrings;int n = s.length();for (int i = 0; i < n; i++) {          // 起始位置for (int j = 1; j <= n - i; j++) { // 子串长度substrings.push_back(s.substr(i, j));}}int len=0;for(auto e:substrings){map<char,int>num;for(auto b:e){num[b]++;if(num[b]>1)break;else{len = max(len, (int)num.size());}}}return len;}

滑动窗口的基本思路是:

两个指针,利用下标访问用Int代替指针,开始的时候都指向开头,用map记录每个字符出现的次数当次数大于1时,我们进行计算一次长度,取最大长度,让left移动到窗口内无重复字符串吗,继续滑动。

细节问题:

这里有个细节问题是当我们的right滑出字符串时,我们会少计算一次长度,导致错误,所以我们每次结束之后计算一次最后的left位置到right为止的字符串长度即可。

下面给出滑动窗口的代码:

class Solution {
public:int lengthOfLongestSubstring(string s) {int left=0;int right=0;map<char,int>num;int len=0;for( right=0;right<s.size();right++){num[s[right]]++;//当map内某个字符出现次数大于1if(num[s[right]]>1){//计算一次长度len=max(len,right-left);//让left移动到窗口内无重复字符串while(s[left]!=s[right]){num[s[left]]--;left++;}num[s[left]]--;left++;}} len=max(len,right-left);if(len==0)len=s.size();return len;}
};

相关文章:

  • 第 87 场周赛:比较含退格的字符串、数组中的最长山脉、一手顺子、访问所有节点的最短路径
  • python--杂识--19--zmq
  • 【c++】#include <>和#include ““的主要区别
  • Smart Form Adobe form
  • 人工智能100问☞第46问:AI是如何“学习”的?
  • C++ STL容器汇总
  • 《TCP/IP协议卷1》第3章 IP协议
  • 成像细节丢失如何解决?OAS 矩孔衍射聚焦模型来解困
  • Python开发功能项目
  • 一步一步学python之(5)基本语法
  • Xsens动捕和Manus数据手套在元宇宙数字人制作中提供解决方案
  • 黑马教程强化day2-3
  • PPIO 上线 Qwen3-Embedding 系列模型
  • 学习STC51单片机35(芯片为STC89C52RCRC)智能小车3(PWM调速小车)
  • 算法: 和为 K 的子数组
  • 海外打车代驾app订单系统框架搭建
  • 芯片电感需求趋势及选型关键因素
  • 英语作文模板
  • 若以floeable流运行(前后端分离)
  • 深度学习:张量标量概念、PyTorch张量创建、类型转换等
  • 济南做网站的好公司/seo推广思路
  • 衢州做网站公司/运营商推广5g技术
  • 怎么做卡盟网站免费/百度发广告需要多少钱
  • 济南优化网站排名/漯河网站推广公司
  • 衡水网站建设在哪里/新闻今天的最新新闻
  • 日本网站制作公司/图片百度搜索