LeetCode 3题:无重复字符的最长子串(原创)

【题目描述】

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。  

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

【解题代码】

package string;public class LengthOfLongestSubstring {public static void main(String[] args) {String s = "abcabcbb";int result = new LengthOfLongestSubstring().lengthOfLongestSubstring(s);System.out.println(result);}public  int lengthOfLongestSubstring(String s) {int i = 0;int max = 0;StringBuilder sb = new StringBuilder(s);String subString = "";while (i < sb.length()){char ch = sb.charAt(i);int inx = subString.indexOf(ch);if (inx != -1) {if (max < subString.length()) max = subString.length();subString = subString.substring(inx + 1);}subString += ch;i++;}if (max < subString.length()) max = subString.length();return max;}
}

【解题思路】

        根据题目描述和对示例进行分析,感觉这一题可以通过“滑动窗口”的算法进行处理,即定义两个索引值i1,i2,i1,i2从0开始,i2向后滑动,判断当前子字符串是否有重复字符,如果没有不断更新最大长度值,如果有的话,将i1设置为与最后一个字符重复的字符下一个索引值。按照这个思路,完成代码编写,并提交LeetCode成功

【解题步骤】

  1. 定义变量
    int i = 0;
    int max = 0;
    StringBuilder sb = new StringBuilder(s);
    String subString = "";
  2. 从0开始,向后滑动获取当前字符,一直到字符串结尾为止
    while (i < sb.length()){char ch = sb.charAt(i);
  3. 判断当前字符如果在子字符串中,那么当前计算当前子字符串长度,并更新长度最大值比较,然后重新调整下一个子字符串的开始索引
    int inx = subString.indexOf(ch);
    if (inx != -1) {if (max < subString.length()) max = subString.length();subString = subString.substring(inx + 1);
    }
  4. 当前子字符串加上当前字符,并将自增滑动索引值
    subString += ch;
    i++;
  5. 循环结束后,将当前子字符串和最大值进行比较更新,并返回最大值
    if (max < subString.length()) max = subString.length();
    return max;

【思考总结】

  1. 这道题的关键是“滑动窗口”的算法实现思路,不断向后滑动寻找合理的无重复字符子串,并刷新长度最大值;
  2. 程序员对于字符串的操作,一定能非常精熟;
  3. LeetCode解题之前,一定不要看题解,看了就“破功”了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dalsa windows10下安装流程及部分问题分析

文章目录 安装及依赖库说明切换驱动模式流程问题&#xff1a;通过Dalsa SDK开发后找不到相机&#xff1f;问题&#xff1a;找不到采集卡&#xff1f; 安装及依赖库说明 官网(https://www.teledynedalsa.com/en/support/downloads-center/)下载的最新文件&#xff08;20240515&…

Leetcode 404:左叶子之和

给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 思路&#xff1a;遍历树&#xff0c;寻找左叶子节点&#xff1b; 如果判断是左叶子节点&#xff0c;就更新sum。 public static int sumOfLeftLeaves(TreeNode root){int sum0;sumcompute(root,sum);return sum;}/…

Elasticsearch 8.1官网文档梳理 - 十四、Query DSL(ES 查询语法)

Query DSL Elasticsearch 提供了一种基于JSON 的查询 DSL (Domain Specific Language) 来定义查询。可以把查询 DSL 看作是查询的 AST&#xff08;Abstract Syntax Tree)&#xff0c;由两种类型的子句组成: 叶子节点查询&#xff1a; 叶子查询子句在特定字段中查找特定值&…

Flutter 中的 DrawerHeader 小部件:全面指南

Flutter 中的 DrawerHeader 小部件&#xff1a;全面指南 在 Flutter 的 Drawer 组件中&#xff0c;DrawerHeader 是一个特殊的部件&#xff0c;用于在抽屉的顶部显示&#xff0c;通常包含应用的标志、用户信息、标题或其他重要的视觉元素。DrawerHeader 可以作为一个视觉分隔符…

Vue3 报v-bind is missing expression.vue(34)错误的解决方案

一、项目环境 node.js 版本&#xff1a;node-v20.11.1-x64 vscode版本&#xff1a;version 1.89 错误截图 二、可能原因解决方案 2.1 v-bind 与 :src之间存在空格 错误示例&#xff1a; <img v-bind :src"imgurl" /> 如果有在 :src 前面写了 v-bind&…

使用Pixi.js 图片切换特效(图片分段下滑以及复原)

1.效果: 2.实现原理: 将图片按宽高切分为x*y(具体可以自己调整)个矩形区域&#xff0c;对每个顶点分配一个随机值noiseValue(-1到1之间),在顶点着色器中根据这个随机值而做出不同的y轴位移效果从而实现出分段的下滑或者复原的效果。 3.代码实现: 首先是顶点着色器的代码,其中…

C++ lambda表达式详解

C lambda表达式详解 C11 lambda表达式精讲 [ capture ] ( params ) opt -> ret { body; };capture 是捕获列表&#xff0c;params 是参数表&#xff0c;opt 是函数选项&#xff0c;ret 是返回值类型&#xff0c;body是函数体 一个完整的 lambda 表达式看起来像这样&#xf…

医院污水一体化处理设备有哪些

医院污水一体化处理设备通常包括以下几个主要组件&#xff1a; 预处理单元&#xff1a;用于去除污水中的固体悬浮物、颗粒物、油脂等&#xff0c;常见的预处理单元包括格栅、沉砂池、油水分离器等。生物处理单元&#xff1a;用于降解有机物质和去除氮、磷等营养物质。常见的生物…

7D-RESAR性能工程:术语表

文章目录 1. 前言1.1. 编写目的1.2. 适应范围与对象 2. 术语表2.1. RESAR性能工程2.2. 性能测试2.3. 性能项目2.4. 性能项目方案2.5. 性能项目计划2.6. 性能需求类术语2.6.1. 性能需求/指标2.6.2. 并发用户2.6.3. 在线用户2.6.4. 并发度&#xff08;并发率&#xff09;2.6.5. 事…

Kubernetes进阶对象Deployment、DaemonSet、Service

Deployment Pod 在 YAML 里使用“containers”就可以任意编排容器&#xff0c;而且还有一个“restartPolicy”字段&#xff0c;默认值就是 Always&#xff0c;可以监控 Pod 里容器的状态&#xff0c;一旦发生异常&#xff0c;就会自动重启容器。 不过&#xff0c;“restartPo…

Java小游戏之汤姆猫

背景&#xff1a; 博主写过羊了个羊小游戏&#xff0c;客户觉得羊了个羊同学写过了&#xff0c;想换一个&#xff0c;于是笔者想到了汤姆猫。就是那个以前在苹果手机上的猫。 过程&#xff1a; 初始会有一个猫的图片展示&#xff0c;然后你点击按钮&#xff0c;猫会有不同动作…

C++进阶之路:何为默认构造函数与析构函数(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Web3与物联网:构建智能连接的数字世界

引言 随着互联网的不断发展&#xff0c;物联网&#xff08;Internet of Things, IoT&#xff09;作为一种新兴的信息技术&#xff0c;正在逐渐渗透到我们的生活和工作中。而随着Web3的兴起&#xff0c;物联网将迎来新的发展机遇。本文将探讨Web3与物联网的结合&#xff0c;如何…

如何在职场中构建稳固地位:持续学习、拓展人脉与职业规划

在日益激烈的职场竞争中&#xff0c;保持一种稳健且前瞻性的状态是至关重要的&#xff0c;它可以帮助我们在各种“裁员潮”中保持相对安全的位置。以下是一些建议&#xff0c;帮助我们判断和维持在职场中的安全位置&#xff1a; 首先&#xff0c;持续学习和提升技能是关键。职场…

2024年NOC大赛创客智慧(西瓜创客)图形化复赛编程真题模拟试卷包含答案

NOC 复赛图形化模拟题 【题目要求】 1、添加角色小猫和“Balloon1”角色气球(大小 70) 2、添加背景“Boardwalk” 3、点击绿旗,角色初始位置如图,小猫从舞台左侧出发,向舞台右 侧移动,移动过程中不断切换造型 4、当小猫碰到气球角色,小猫停止移动,气球逐渐向舞台上方…

FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题

上一篇文章介绍了如何通过ZLMediaKit实现视频推拉流&#xff0c;并使用VLC播放器验证视频直播地址。即使不用VLC播放器&#xff0c;直接在Qt工程的C代码中调用FFmpeg的API&#xff0c;也能访问ZLMediaKit的直播地址&#xff0c;并正常渲染视频画面。关于如何在Qt工程中引入FFmp…

Oracle中全量CHECKPOINT和增量CHECKPOINT的区别与作用

全量CHECKPOINT和增量CHECKPOINT对用户都是透明的&#xff0c;而增量CHECKPOINT只不过是将全量CHECKPOINT要写的脏块分时间分批次写到数据文件中而已&#xff0c;此操作可以极大地减少对数据库性能的影响。 全量CHECKPOINT 全量CHECKPOINT是指DBWR进程将脏缓冲区列表中的脏块一…

Spring Boot集成Security快速入门Demo

1.什么是Security&#xff1f; Spring Security是一个Java框架&#xff0c;用于保护应用程序的安全性。它提供了一套全面的安全解决方案&#xff0c;包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念&#xff0c;可以轻松地集成到任何基于Spring的应用…

ifconfig 无输出

https://www.cnblogs.com/YYFaGe/p/14482813.html YYFaGe 博客园首页联系管理随笔 - 56 文章 - 0 评论 - 2 阅读 - 94650 ifconfig 无输出 在终端执行ifconfig发现无任何输出&#xff0c;也无报错&#xff08;基于hi3559av100开发板&#xff09;。 1、参考这个连接解决&…

月薪3万,沉迷“薅羊毛”

在网购江湖中&#xff0c;蟹老板是一位拥有十年经验的资深“羊毛党”。 他不仅是位精明的数学家&#xff0c;更是一位高效的“生产线”工人&#xff0c;专注于各大网购平台的优惠机制。每逢618大促&#xff0c;他总能凭借超凡的洞察力和手速&#xff0c;轻松斩获丰厚的“羊毛”…