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

力扣 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)); //注意这里是用left
                left++;
            }
            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)); //注意这里是用left
                left++;
            }
            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;
    }

}
相关推荐
All for pursuit.14 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
我可能是个假开发14 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong14 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
【JAVA】玩家15 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
Wang's Blog16 小时前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
MandalaO_O16 小时前
IDEA 开发(快捷键 + 调试 + 序列化)
java·ide·intellij-idea
xiaoqiMikko17 小时前
JVM 线上排查实战(七):jps 看不见它、jstack 连不上它,可它明明活得好好的
java·jvm
狼爷18 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
念何架构之路18 小时前
zap扩展生态与总结
java·前端·数据库
第七页独白19 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库