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

leetcode 3. 无重复字符的最长子串

2023.9.15

        本题我用的暴力双层for循环 + unordered_set 解决的,外循环控制字符起始位置,内循环将字符放入 unordered_set,并查找有无重复的元素。  用了一个全局变量记录最长字串的长度,局部变量count记录当前层循环的最长子串长度。 代码如下:

class Solution {
public:int lengthOfLongestSubstring(string s) {if(s.size() == 0) return 0;int ans = 1;for(int i=0; i<s.size(); i++){unordered_set<char> set;set.insert(s[i]);int count = 1;for(int j=i+1; j<s.size(); j++){if(set.find(s[j]) == set.end()) //没找到重复元素{count++;set.insert(s[j]);ans = max(ans , count);}else break;}}return ans;}
};

        暴力循环+每层循环都用了unordered_set,可想而知,时间和空间消耗都相当高... 

        看了下别人的解法,这题还可以用滑动窗口来做。定义一个left指针指向滑动窗口的最左端,for循环的i向前遍历。每当发现重复元素,就不断将set头部元素删除,直到没有重复元素位置。最后不断更新最长子串的长度即可。

        代码如下:

class Solution {
public:int lengthOfLongestSubstring(string s) {if(s.size() == 0) return 0;queue<char> que;int ans = 1;int left = 0;for(int i=0; i<s.size(); i++){while(set.find(s[i]) != set.end()) //找到重复元素了{set.erase(s[left]);left++;}set.insert(s[i]);ans = max(ans , i-left+1);}return ans;}
};

http://www.lryc.cn/news/167125.html

相关文章:

  • doccano 文本标注工具使用
  • 快速排序算法的递归和非递归
  • Maven无法拉取SNAPSHOT依赖的解决办法
  • day16-面向对象综合练习(上)
  • 在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境
  • 漫谈:C、C++字符串的困局
  • 基于python+selenium的自动批量添加
  • gdb监视
  • STM32基础知识点总结
  • Python vs C#:首先学习哪种编程语言最好?
  • 代理IP和Socks5代理:跨界电商与全球爬虫的关键技术
  • CentOS 7 调优之周期性的访问中断
  • SpringBoot表现层数据一致性
  • vue路由-两个树形结构数据-递归处理方法
  • JSP SSM 成果展示系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
  • 脚本:python绘制七夕爱心
  • L1 项目概述与Hadoop部署
  • 关键词文章生成器-标题文章生成器
  • 深入了解MySQL中的JSON_ARRAYAGG和JSON_OBJECT函数
  • Ubuntu22.04开启后屏幕黄屏
  • 华为云云耀云服务器L实例评测 | 搭建docker环境
  • exesql=“UPDATE test set date=‘%s‘“ % date 是啥意思
  • 请体验一下falcon 180b 大语言模型的感觉
  • 今晚8点,iPhone15开启预售
  • Meetup 回顾|Data Infra 研究社第十五期(含资料发布)
  • I2S/PCM知识点记录
  • 微信小程序——使用 Vant 组件实现 Popup 弹出层(各位置弹出详细代码分享)
  • linux查看python的py文件的命令
  • 开源库源码分析:Okhttp源码分析(一)
  • 无涯教程-JavaScript - LOOKUP函数