编程语言中如何实现无重复字符的最长子串
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,小编给大家分享一下编程语言中如何实现无重复字符的最长子串,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目:给定一个字符串
千家信息网最后更新 2025年11月06日编程语言中如何实现无重复字符的最长子串
小编给大家分享一下编程语言中如何实现无重复字符的最长子串,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解题思路:
暴力求解, 时间复杂度为 O(n^3), 因为要对所有字符遍历, 对子串遍历确认是否有重复字符, pass
滑动窗口, 维护一个索引 [i,j) 的滑动窗口, 对已存在的字符 i' 直接更新滑动窗口 [i',j), 你需要保留每一个字符值及其索引, 即由字符映射索引位置哈希映射: Key 为字符值, Value 为索引位置字符映射: ASCII 码共 128 个字符, 维护一个长度为 128 的整型数组,数组索引值映射 128 个字符,存储元素值为字符位置
哈希映射:
Java:
class Solution { public int lengthOfLongestSubstring(String s) { char[] chars = s.toCharArray();//转为字符数组 if (chars.length == 0) return 0; HashMap map = new HashMap<>();//建立哈希映射 int size = s.length(), count = 0, i = 0; for (int j = 0; j < size; j++) {//遍历字符 if (map.containsKey(chars[j]))//如果映射中存在该字符 i = Math.max(map.get(chars[j]), i);//更新滑动窗口的左边界 i count = Math.max(count, j - i);//更新 count 为最大值 map.put(chars[j], j + 1);//更新映射中该字符映射的 Value 值为当前位置加一 } return count + 1;//返回最大累加总数, 需要加 1 }} Python:
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not s: return 0 hash_map = dict() # 建立字典 size = len(s) i, count = 0, 0 for j, c in enumerate(s): # 枚举字符 if c in hash_map: # 如果映射中存在该字符 i = max(i, hash_map[c]) # 更新滑动窗口的左边界 i count = max(count, j-i) # 更新 count 为最大值 hash_map[c] = j+1 # 更新映射中该字符映射的 Value 值为当前位置加一 return count+1 # 返回最大累加总数, 需要加 1
字符映射:
Java:
class Solution { public int lengthOfLongestSubstring(String s) { char[] chars = s.toCharArray(); if (chars.length == 0) return 0; int[] index = new int[128];//建立长度为 128 位的 ASCII 码字符映射表 int size = s.length(), count = 0, i = 0; for (int j = 0; j < size; j++) {//遍历字符 i = Math.max(index[chars[j]], i);//更新滑动窗口的左边界 i count = Math.max(count, j - i);//更新 count 为最大值 index[chars[j]] = j + 1;//更新映射中该字符所在元素值为当前位置加一 } return count + 1;//返回最大累加总数, 需要加 1 }}Python:
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not s: return 0 size = len(s) i, count = 0, 0 index = [0]*128 # 建立长度为 128 位的 ASCII 码字符映射表 for j, c in enumerate(s): # 枚举字符 i = max(i, index[ord(c)]) # 更新滑动窗口的左边界 i count = max(count, j-i) # 更新 count 为最大值 index[ord(c)] = j+1 # 更新映射中该字符所在元素值为当前位置加一 return count+1 # 返回最大累加总数, 需要加 1
因为 Python 没有字符概念, 需要 ord() 函数转为 ASCII 数字
以上是"编程语言中如何实现无重复字符的最长子串"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
字符
更新
最大
长度
位置
最长
索引
总数
最大值
加一
元素
数组
示例
篇文章
哈希
解释
输入
输出
编程语言
语言
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全无绝对
长宁区推广数据库系统研发成本
欧盟网络安全法实施时间
新盗墓笔记金丝楠木服务器
远程服务器工具xshell等
一般网络游戏服务器的安装
md5 数据库
上海特定网络技术开发产品
域服务器如何管理
梧州市网络安全保卫支队地址
如何更改主机服务器密码
管理软件开发使用啥语言
电魂网络安全插画
根据国家统计局的数据库
大学专业学软件开发
gntc网络技术
深圳图形软件开发
大华管理服务器型号
怎么用公式取截取数据库
计算机技术与网络技术安徽
ios系统软件开发方案报价
常用软件开发技术指导
梅州自主可控软件开发费用
如何更改主机服务器密码
几岁才开始学网络安全
软件开发选题背景和意义
软件开发的环境可行性
阿里云服务器免费半年
网络安全保障有哪些
服务器资源分配动态规划算法