栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

滑动窗口--leetcode03

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

滑动窗口--leetcode03

题目描述

题目链接:03leeetcode
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

解题思路–map集合滑动窗口解法

我们采用java中的map集合来对于给定字符串进行遍历,并记录下给定字符串的值以及下标,不断遍历,如果出现了重复数字,通过map集合中带有的键找值功能去找到对应的下标,将窗口的最左边下标进行更新。

class Solution {
    public int lengthOfLongestSubstring(String s) {
        Map map = new HashMap<>();
        int ans = 0;
        int n = s.length();
        for (int j =0,i=0;j 

解题思路2–set集合滑动窗口解法

我们可以使用 HashSet 将字符存储在当前窗口 [i,j) 中。 然后我们向右侧滑动索引 j,如果它不在 HashSet 中,我们会继续滑动 ,如果直s[j] 已经存在于 HashSet 中, 我们需要逐个将HashSet中的值remove , 直到将j对应的重复值移出Set,与此同时,索引i右移。这样做的目的是使所有可能存在的没有重复字符的最长子串都以索引i开头,如果我们对所有的i都这样做,就可以得到最后答案.

class Solution {
    public int lengthOfLongestSubstring(String s) {
        Set charset = new HashSet<>();
        int ans = 0;
        int i = 0;
        int j = 0;
        int n = s.length();
        while(i < n && j < n){
            if(!charset.contains(s.charAt(j))){
                charset.add(s.charAt(j++));
                ans = Math.max(ans,j - i);
            }else {
                charset.remove(s.charAt(i++));
            }
        }
        return ans;
    }
}

参考:

https://blog.csdn.net/nailiang97/article/details/97136263

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号