Java/Python怎么找出无重复字符的最长子串
发表于:2024-09-26 作者:千家信息网编辑
千家信息网最后更新 2024年09月26日,这篇文章主要讲解了"Java/Python怎么找出无重复字符的最长子串",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java/Python怎么找出无重
千家信息网最后更新 2024年09月26日Java/Python怎么找出无重复字符的最长子串
这篇文章主要讲解了"Java/Python怎么找出无重复字符的最长子串",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java/Python怎么找出无重复字符的最长子串"吧!
题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 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; HashMapmap = 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 数字
感谢各位的阅读,以上就是"Java/Python怎么找出无重复字符的最长子串"的内容了,经过本文的学习后,相信大家对Java/Python怎么找出无重复字符的最长子串这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
字符
更新
最长
最大
长度
位置
索引
总数
最大值
加一
元素
数组
示例
哈希
学习
解释
输入
输出
内容
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
关于三分钟网络安全的广播稿
外接网络连接不上服务器
网络安全防护体系日益完善
与客户交谈后网络技术人员怀疑
数据库null值取反
数据库更新数据的指令
对数据库了解多少
tcp服务器回收链接
订单管理系统 数据库
网络安全与信息安全市场规模
网络安全防护功能包括内容
软件开发零基础需要学什么
专业数据库 知乎
wind数据库导出
慈利天气预报软件开发
戴尔r730服务器品牌直销
湖南省计算机软件开发培训学校
云数据库rds简介
江西熊猫网络技术
数据库软件ar w
公安机关网络安全保卫大队
网络安全中网站漏洞怎么找
网络安全工作缺口
服务器spn
数据库表设计可以用中文字段名吗
乐清市紫袍网络技术工作室
旅游景区网络安全现状分析
web报表与数据库连接
网络游戏服务器规格
本地虚拟服务器软件