leecode3 无重复元素的最长子串

S4 codingblock增加客户化字段的一些小问题 今天使用codingblock增加了两个客户化字段后(S4版本),查看常用的几个表 ACDOCA BSEG 等等两个客户化字段安静的出现在表内,以为没有问题了 。结果后来MM那边查看物料凭证时程序直接dump,后来开发查明原因居然是因为财务增加的这两个增强字段的原因。 报错如下图所示: 主要是因为增加了字段后,更新了后台表,但是没有自动更新到视图。就是MSEG表增加了这两个字段,但是呢他对应的视图NSDM_V_MSEG没有增加,导致两边的结构不一致。 所以要解决这个问题,只能在视图NSDM_V_MSEG增 阅读详情

在这里插入图片描述

我的思路

原始代码

我发现我虽然解决问题了,但是我的思路不简洁,不明白。

这个题本质上还是滑动窗口的问题。

具体思路为

  1. 先定义两个指针,对应滑动窗口的两个边界

  2. 关键是:定义一个集合,来判断这个窗口中的元素是否存在重复,如果存在重复的话,就把第一个元素删掉。left右移,缩小窗口

    1. 除了这个点之外,这个题没什么难点
public int lengthOfLongestSubstring(String s) {
    int len = s.length();
    if(len<=1){
        return len;
    }
    int low=0,fast=1;
    int max = 0;
    List<Character> list = new ArrayList<>();
    list.add(s.charAt(0));
    for(;fast<len;fast++){
        if(list.contains(s.charAt(fast))){
            list.add(s.charAt(fast));
            //当前元素重复了,需要移动left左指针。
            while (true){
                if(low<fast&&list.get(0)==s.charAt(fast)) {
                    list.remove(0);
                    low++;
                    break;
                }
                list.remove(0);
                low++;
            }
        }else {
            list.add(s.charAt(fast));
        }
        if(max<list.size()){
            max = list.size();
        }
    }
    return max;
}

简化代码

这个题目本身不难,我在想我怎么简化代码,我最初始的代码之所以这么复杂是因为我没有想到判断元素是否存在和移除元素是可以放在一起的。只要list中还存在这个元素,那么就已知移除。而不是逐渐遍历这个集合去不断的寻找这个元素。

注意

如果想要更快的话,可以把这个list换成这个set

public int lengthOfLongestSubstring(String s) {
    int len = s.length();
    int max = 0,low=0;
    List<Character> list = new ArrayList<>();
    for(int fast=0;fast<len;fast++){
        char c = s.charAt(fast);
        while (list.contains(c)){
            list.remove(0);
            low++;
        }
        list.add(c);
        max = Math.max(max,fast-low+1);
    }
    return max;
}

灵神

灵神的思路我大致看了一下,大体流程和我的相似,区别在于,我是利用list集合进行判断的,灵神使用一个长度为128的数组 进行判断,因为字母ASCII码可以当作这个数组的下标

思路一

class Solution {
    public int lengthOfLongestSubstring(String S) {
        char[] s = S.toCharArray(); // 转换成 char[] 加快效率(忽略带来的空间消耗)
        int n = s.length;
        int ans = 0;
        int left = 0;
        int[] cnt = new int[128]; // 也可以用 HashMap<Character, Integer>,这里为了效率用的数组
        for (int right = 0; right < n; right++) {
            char c = s[right];
            cnt[c]++;
            while (cnt[c] > 1) { // 窗口内有重复字母
                cnt[s[left]]--; // 移除窗口左端点字母
                left++; // 缩小窗口
            }
            ans = Math.max(ans, right - left + 1); // 更新窗口长度最大值
        }
        return ans;
    }
}

作者:灵茶山艾府
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solutions/1959540/xia-biao-zong-suan-cuo-qing-kan-zhe-by-e-iaks/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路2

class Solution {
    public int lengthOfLongestSubstring(String S) {
        char[] s = S.toCharArray(); // 转换成 char[] 加快效率(忽略带来的空间消耗)
        int n = s.length;
        int ans = 0;
        int left = 0;
        boolean[] has = new boolean[128]; // 也可以用 HashSet<Character>,这里为了效率用的数组
        for (int right = 0; right < n; right++) {
            char c = s[right];
            // 如果窗口内已经包含 c,那么再加入一个 c 会导致窗口内有重复元素
            // 所以要在加入 c 之前,先移出窗口内的 c
            while (has[c]) { // 窗口内有 c
                has[s[left]] = false;
                left++; // 缩小窗口
            }
            has[c] = true; // 加入 c
            ans = Math.max(ans, right - left + 1); // 更新窗口长度最大值
        }
        return ans;
    }
}

作者:灵茶山艾府
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solutions/1959540/xia-biao-zong-suan-cuo-qing-kan-zhe-by-e-iaks/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
合肥工业大学操作系统实验9 依据操作系统课程所介绍的页面置换算法与动态内存分配的原理,本实验的目的是掌握OPT、FIFO、LRU、LFU、Clock等页面置换算法;掌握可用空间表及分配方法;掌握边界标识法以及伙伴系统的内存分配方法和回收方法。从而深入理解操作系统的内存管理。从而加深对教材上页面置换算法与动态内存分配的理解。 阅读详情

相关推荐

DDR内存设计必看:DFI接口协议详解与实战避坑指南(附时序图解析)

本文深入解析了DDR内存设计中连接内存控制器与物理层的DFI接口协议,聚焦于DDR4/DDR5设计的实际痛点。文章详细阐述了协议版本兼容性、时钟架构(匹配频率与频率比系统)、PCB信号完整性设计以及上电初始化与调试等关键环节,为硬件工程师提供了一套从理论到实战的完整避坑指南,并附有时序图解析以助理解。

weixin_29256771的博客 330

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

力扣3. 无重复字符的最长子串题目思路代码 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须

k_surge的博客 634

VSCode玩转ESP-ADF音频开发:从环境搭建到成功播放MP3的避坑全流程

本文详细介绍了如何在VSCode环境下使用ESP-ADF框架进行ESP32音频开发,从环境搭建到成功播放MP3的全流程。重点解析了`IDF_PATH`和`ADF_PATH`的配置问题,以及如何解决`xTaskCreateRestrictedPinnedToCore`等常见编译错误,帮助开发者快速上手ESP-ADF音频开发。

weixin_42520909的博客 339

[LeetCode] 3.无重复字符的最长子串

[LeetCode] 3.无重复字符的最长子串 文章目录[LeetCode] 3.无重复字符的最长子串题目思路滑动窗口哈希表 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其 长度为 3。 示例 2: 输入: "bbbbb" 输出:...

菠萝盖饭的博客 310

长短期记忆网络(Long Short-Term Memory networks, LSTM)

如何简单的理解LSTM——其实没有那么复杂:

weixin_39910711的博客 2万+

python 成语接龙-连接数据库

from xpinyin import Pinyin import pymysql while 1: conn = pymysql.connect( host='localhost', #本地连接 user='root', #数据库账户名 password='password', #数据库密码 db='dic',

Hero2902的博客 598

Leetcode 3 无重复元素的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"...

qq_37637818的博客 130

Li‘s 核磁共振影像数据处理-4-使用3D Slicer从DTI计算参数图(FA、ADC等)

从DTI计算参数图 通过3D Slicer软件计算 主要步骤 导入DICOM影像 3D Slicer似乎只能支持DICOM格式和NRRD格式的DTI处理,而无法支持NIFTI+磁场梯度信息文件的方式。(这里不确定,如有错误请指正。) 模块选择: 需要选择或设置的内容包括:选择DicomToNrrd,设置Output DWI Volume file,设置Input Dicom Data Directory。设置好后点击“Apply”。 制作mask。 实质就是去脑壳。 模块选择: 需要设置的内

weixin_38594676的博客 3920

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

对于给定的字符串,需要遍历字符串中的每个字符,设置变量记录无重复的左部索引,遇到重复的字符,将左部更新为重复字符的下一位索引。,会下拉一个链表在链表的长度大于 7 或者 8 时候(原因在检查时候,可能会存在一次数组的扩容)查询效率低下,会转化成为红黑树,在红黑树的长度小于 6 的时候,会退化成为链表。上面的是HashMap的get方法,HashMap可以直接通过hash计算得到的键来获取对象,而HashSet, 直接用HashMap的containKeys方法。...

qq_46724069的博客 470

17、激光切割质量影响因素及优化研究

本文研究了激光切割过程中焦点位置、入射角、激光功率、切割速度和气体压力等因素对切割质量的影响,采用响应面方法(RSM)和Box-Behnken设计,基于三种不同喷嘴对SS 304不锈钢进行实验。通过建立切缝宽度比和条纹深度的回归模型,并结合方差分析验证模型有效性,深入分析各参数对切割质量的影响机制。研究发现喷嘴结构差异显著影响参数作用趋势,尤其在切割速度和气体压力响应上表现明显。最终通过多目标优化确定最小激光功率、适中切割速度和最大气体压力为最优组合,显著提升切割质量,为实际生产提供了理论依据和技术支持。未

grape的博客 130

自适应控制 (Adaptive Control) 算法详解及案例分析

自适应控制是一种能够在线调整控制器参数以适应系统动态变化的控制方法。其核心思想是通过实时估计系统参数或调整控制器参数,使系统在不确定性或动态变化的环境中仍能保持稳定性和性能。

闲人编程的博客 4084

5/2 LeetCode每日一题 3. 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 ...

weixin_45100524的博客 255

nuScenes数据集详细介绍

nuScenes网上介绍资料较多,但是大部分仅仅是对官网的翻译,缺乏各个文件的内在联系介绍。例如,nuScenes激光雷达的数据格式,点云包含哪几种属性。再比如,sample文件夹和sweeps文件夹下的文件关系,以及是如何在相关json文件中体现的。本文将详细介绍nuScenes数据集的各个部分。

叶子的博客 1万+

无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"w...

shuipinglp的专栏 222

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数组-1-LeetCode 03题 -> 无重复字符的最长子串

LeetCode 03题 -> 无重复字符的最长子串 1. 题目描述 给定一个字符串,找出其中不含有重复字符的最长子串的长度。 示例: s = "abcabcbb" 返回 3 s = "bbbbb" 返回 1 s = "pwwkew" 返回 3 无重复字符的最长子串是 "wke" //注意: 是 子串 的长度,不是子序列。 2. 解题思路 滑动窗口法: ①定义一个滑动窗口,窗口内无重复元素,所以需要定义一个HashSet集合; ②滑动窗口的左右边界left、right,

baidu_38126306的博客 315

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Leetcode 3. 无重复字符的最长子串(双指针)

Leetcode 3. 无重复字符的最长子串 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 分析 思路 找符合特定条件的子串,首先暴力就是枚举。为了方便枚举可以将其分类为以 s[i] 结尾的字符串集合,这样就变为找所有集合中最大值。 进一步,对于每一个结尾为 s[i] 的字符串,要找到最左边的 j ,那么 s[j -> i]即为当前集合的目标字串,i - j + 1 即为当前集合的答案。 如何找 j,可以从 i 往前扫,直到 s[j-1 -> i] 中有重复元素。

Stormjing的博客 487

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

leetcode解题心路3-无重复字符的最长子串

无重复字符的最长子串 问题 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 一、示例 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b

blue_can的博客 5581

LeetCode[滑动窗口]:无重复字符的最长子串

LeetCode[滑动窗口]:无重复字符的最长子串 题目描述: 给定一个字符串,找出不含有重复字符的 最长子串 的长度。 示例: 给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。 给定 “bbbbb” ,最长的子串就是 “b” ,长度是1。 给定 “pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,“pwke” 是 子序列 而不是子串 解题思路: 这是一道可以跟Two Sum媲美的题。给了我们一个字符串,让我们求最长的无重复字符的子串,注意

weixin_45459322的博客 135

【LeetCode003】无重复字符的最长子串

题目描述 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 (详见LeetCode)https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 题目分析 以“abcabcbb”为例,梳理手动得出答案的过程。 1.从第一个字母开始往后比较,如不重复则看下一个字母。 a→b...

fistomina的博客 226

LeetCode3:Longest Substring Without Repeating Characters(无重复字符的最长子串)

LeetCode3:Longest Substring Without Repeating Characters(无重复字符的最长子串) 欢迎访问我的博客 LeetCode:https://leetcode.com/problems/longest-substring-without-repeating-characters/ LeetCodeCn:https://leetcode-cn.com/...

weixin_33772645的博客 93

LeetCode解题记录(3)——无重复字符的最长串

LeetCode解题记录——无重复字符的最长子串题目说明测试样例题意理解解题方案滑动窗口法 题目说明 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 测试样例 输入:“abcabcbb” 输出:3 最长子串:“abc” 输入:“bbbbb” 输出:1 最长子串:“b” 输入:“pwwkew” 输出:3 最长子串:“wke” 题意理解 字符串处理题,实际上也是一个数组的问题,这里需...

DerrickerXu 565

【Leetcode】3.无重复字符的最长子串

题目描述: 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最...

IT_Mitchell的博客 231

LeetCode·3.无重复字符的最长子串·滑动窗口

滑动窗口

m0_64560763的博客 414

LC 1.1 两数之和、两数相加、无重复字符的最长子串

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target, 请你在该数组中找出 和为目标值 target 的那两个整数, 并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。 但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 来源:力扣(LeetCode) 链接:https://l

wangtongyao_的博客 201

面试经典 150 题 -- 滑动窗口 (总结)

面试经典 150 题 -- 滑动窗口 (总结)

ros275229的博客 4403

备战复试,每日三题Day04

备战复试,每日三题 题目一:买卖股票的最佳时间 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 示例 1: 输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润

qq_43600941的博客 224
上一篇: leecode42 接雨水
下一篇: leecode2958 最多K个重复元素的最长子数组
TranquilGlow
博客等级 码龄5年 132粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值