news 2026/8/20 0:14:07

[算法][力扣3]无重复字符的最长子串

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[算法][力扣3]无重复字符的最长子串

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

示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。

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

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

如何判断下一个元素和当前子串没有重复元素呢?
我们可以使用一个数组,这个数组一共有125个位置,freq[k]存储的anscal为k相应的字符他在子串中出现的评率,如果为0就是没有重复,为1就是重复了

字母对应的数字如下
int a = 'a'; // 97
int z = 'z'; // 122
int A = 'A'; // 65
int Z = 'Z'; // 90

写法一:使用数组记录窗口

public class Test02_3_2 { public static void main(String[] args) { test01(); } private static void test01() { int ret = lengthOfLongestSubstring("abcdddd"); System.out.println(ret); } public static int lengthOfLongestSubstring(String s) { if (s == null || s.equals("")) { return 0; } int left = 0; int right = 0; int maxLen = 1; int[] window = new int[128]; window[s.charAt(0)] = 1; while (left < s.length()) { maxLen = Math.max(maxLen, right - left + 1); if (right + 1 < s.length() && window[s.charAt(right + 1)] == 0) { window[s.charAt(right + 1)] = 1; right++; } else { window[s.charAt(left)] = 0; left++; } } return maxLen; } }

写法二:使用set记录窗口中不重复的元素,效率会低一些

public class Test02_0001 { public static void main(String[] args) { int ret = lengthOfLongestSubstring("bbbbb"); System.out.println(ret); } public static int lengthOfLongestSubstring(String s) { // 边界条件判断 if (s == null || s.length() == 0) { return 0; } // 初始化指针 int left = 0; int right = 0; int maxSubArrLength = 1; // 窗口 Set<Character> window = new HashSet<>(); window.add(s.charAt(0)); while (left < s.length()) { maxSubArrLength = Math.max(maxSubArrLength, window.size()); if (right + 1 < s.length() && !window.contains(s.charAt(right + 1))) { // 窗口右移 window.add(s.charAt(right + 1)); right++; } else { // 遇到重复元素,窗口左移 // 右边指针无法再移动,窗口左移 window.remove(s.charAt(left)); left++; } } return maxSubArrLength; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 16:25:51

矿用本安型全景雷达物位扫描仪的应用

唐山大方汇中仪表研发的GUL系列矿用本安型全景雷达物位扫描仪&#xff08;3D雷达物位扫描仪&#xff09;为非接触计量级测量仪表&#xff0c;具有数字信号、图像输出功能。3D雷达物位扫描仪基于雷达信号时间行程原理对多个测量点进行测距&#xff0c;其内部的扫描机构可对料仓内…

作者头像 李华
网站建设 2026/7/14 16:26:05

linux awk使用

1.概述awk 是 Linux 系统中一个非常强大的文本处理工具&#xff0c;常被称为“三剑客”之一&#xff08;另外两个是 grep 和 sed&#xff09;。它主要用于从文本文件中提取、过滤和处理数据&#xff0c;尤其适合处理结构化数据&#xff0c;例如日志文件、CSV 文件等。2.基本语法…

作者头像 李华
网站建设 2026/8/20 0:13:18

揭秘 GEO AI 搜索排名的商业价值

揭秘 GEO AI 搜索排名的商业价值在数字化浪潮中&#xff0c;企业如何快速抢占流量高地&#xff1f;太原千里之眼智能科技有限公司给出了答案。作为山西人工智能公司排名靠前的技术供应商&#xff0c;其核心产品GEO AI 搜索排名正在重塑企业获客逻辑。一、为什么选择 GEO AI 搜索…

作者头像 李华
网站建设 2026/8/20 0:13:34

LLM判断检索文档能否回答问题的探索

大模型判断检索到的文档列表能否回答问题&#xff0c;是通过一套概率计算、模式匹配和语义理解完成的。 简单来说&#xff0c;LLM不是确定&#xff0c;而是推断文档列表是否有可能包含了回答问题的信息。 这里尝试基于网络资料&#xff0c;梳理LLM判断文档能否回答问题常用流…

作者头像 李华
网站建设 2026/8/13 19:59:41

Kotlin对象表达式与声明全解析

Kotlin 对象表达式与对象声明Kotlin 中的对象表达式&#xff08;Object Expressions&#xff09;和对象声明&#xff08;Object Declarations&#xff09;是两种创建匿名对象和单例对象的机制。它们分别用于不同的场景&#xff0c;但都能简化代码结构并提高灵活性。对象表达式对…

作者头像 李华
网站建设 2026/7/14 16:26:03

腾讯的 Skills社区 真的好用吗?这几个点不会,坑你没商量

引言&#xff1a;寄予厚望的本土化AI技能社区&#xff0c;体验却不尽如人意随着AI Agent&#xff08;圈内人称“龙虾”&#xff09;热潮席卷而来&#xff0c;腾讯近期正式推出了专为国内用户打造的AI Skills社区——SkillHub&#xff0c;官方宣称其解决了海外ClawHub下载慢、全…

作者头像 李华