滑动窗口 | Java | (hot100) 力扣 3

ops/2024/10/18 9:20:03/

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

暴力法:双层for循环,i-j的字符查重

滑动窗口:因为这题被分在这个类别里,那么已知要用滑动窗口,思路应该是什么。

反正我想不出来……

  • 看了别人的题解写出来的
  • 出错点:特别容易下标和元素弄混
java">class Solution {public int lengthOfLongestSubstring(String s) {Set<Character>set = new HashSet<Character>();char ch;int res=0;for(int left=0,right=0; right<s.length(); right++) {ch = s.charAt(right);while(set.contains(ch)) {set.remove(s.charAt(left)); //注意这里是用leftleft++;}set.add(ch);res = Math.max(res, right-left+1);}return res;}
}

ACM模式练习 https://www.acwing.com/problem/content/57/

滑动窗口模板

java">//外层循环扩展右边界,内层循环扩展左边界
for (int l = 0, r = 0 ; r < n ; r++) {//当前考虑的元素while (l <= r && check()) {//区间[left,right]不符合题意//扩展左边界}//区间[left,right]符合题意,统计相关信息
}

本题变形

腾讯面试题,需要返回的是子串(来自力扣评论)
在这里插入图片描述
我的思路:在这一句下功夫:res = Math.max(res, right-left+1);
多设置一个变量 strLeft,当更新res的时候,strLeft = left。当for循环结束,知道子串长度res和字串起始值strLeft就可以返回字串了

java">public class Collection01 {public static void main(String[] args) {lengthOfLongestSubstring("pwwkew");}public static int lengthOfLongestSubstring(String s) {Set<Character>set = new HashSet<Character>();char ch;int res=0;int strleft=0;for(int left=0,right=0; right<s.length(); right++) {ch = s.charAt(right);while(set.contains(ch)) {set.remove(s.charAt(left)); //注意这里是用leftleft++;}set.add(ch);if((right-left+1)>res) {res = right-left+1;strleft = left;}}System.out.println(res);System.out.println(strleft);System.out.println(s.substring(strleft,strleft+res));return res;}}

http://www.ppmy.cn/ops/93139.html

相关文章

奥威VS帆软(各有所长)

随着大数据时代的到来&#xff0c;商业智能BI软件成为了企业不可或缺的一部分。它们通过收集、整合、分析和展示数据&#xff0c;帮助企业更好地理解业务状况&#xff0c;做出更明智的决策。奥威BI和帆软BI都是备受瞩目的老牌BI软件&#xff0c;本文将详细对比这两大老牌BI软件…

【人工智能】【机器学习】-好书推荐之《Python神经网络编程》

目录 内容概览 编程环境 面向对象 学习目标 如果你是想要自学机器学习相关知识的读者&#xff0c;我相信看完这篇文章的介绍后&#xff0c;你会对机器学习有更清晰的认识。帮助你走进机器学习的殿堂。 《Python神经网络编程》&#xff08;原书名&#xff1a;Make Your Own …

Ubuntu22.04 安装mysql5.7

一、卸载本地 Mysql //1、查看本地mysql依赖情况dpkg --list | grep mysql//2.卸载mysql-commonsudo apt remove mysql-common//3.卸载并清除mysql5.7sudo apt autoremove --purge mysql-server-5.7//4.清除残留数据dpkg -l | grep ^rc| awk {print$2}| sudo xargs dpkg -P//5…

Qt国际化

写在前面 在全球化的今天&#xff0c;软件应用的国际化变得尤为重要。 国际化不仅仅是翻译界面文本&#xff0c;更涉及到日期、时间、货币、数字格式等多方面的适应性调整。 Qt作为一个强大的跨平台应用开发框架&#xff0c;提供了丰富的国际化支持工具&#xff0c;使得开发者…

QSqlQueryModel与QSqlTableModel查询数据库

QSqlQueryModel 与 QSqlTableModel 项目中需要对数据进行查询与展示&#xff0c;数据量不大&#xff0c;使用的是sqlite数据库&#xff0c;将使用过程记录如下。 QSqlTableModel 适用于显示整个表的数据&#xff0c;使用方式如下&#xff1a; QSqlQuery query;//把数据库…

单 元 测 试

单元测试是软件开发中的一种测试方法,它专注于对软件中的最小可测试单元(通常是单个函数或方法)进行验证。这种测试方法的目的是确保每个这样的单元都能独立地按照预期工作。 下面是单元测试的一些关键特点: 隔离性: 单元测试通常在一个与系统其他部分隔离的环境中运行,…

C++ 类与对象

面向对象程序设计基本特点 特点&#xff1a; 抽象&#xff08;数据抽象&#xff0c;行为抽象&#xff09; 数据抽象&#xff1a;int hour,int minute.....,车&#xff1a;长&#xff0c;宽&#xff0c;高.... 功能抽象&#xff1a;showTime(),setTime() .....车&#xff1a;刹车…

电脑屏幕录制工具分享5款,附上详细电脑录屏教程(2024全新)

日月更迭&#xff0c;转眼间已经来到了2024年的立秋&#xff0c;在这个数字技术快速发展的时代&#xff0c;电脑录屏技术已经成为了一项不可或缺的技能&#xff0c;无论是用于工作汇报、在线教学、游戏直播还是个人娱乐。那么录屏软件哪个好用呢&#xff1f;接下来&#xff0c;…