首页 > 试题广场 >

最长不含重复字符的子字符串

[编程题]最长不含重复字符的子字符串
  • 热度指数:47997 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
数据范围:

示例1

输入

"abcabcbb"

输出

3

说明

因为无重复字符的最长子串是"abc",所以其长度为 3。    
示例2

输入

"bbbbb"

输出

1

说明

因为无重复字符的最长子串是"b",所以其长度为 1。    
示例3

输入

"pwwkew"

输出

3

说明

因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。    
头像 牛客题解官
发表于 2022-04-25 18:57:06
精华题解 题目的主要信息: 从一个字符串中找一个最长的一段不含重复字符的子串,求长度 子串必须是字符串中连续的部分 举一反三: 学习完本题的思路你可以解决如下题目: JZ46. 把数字翻译成字符串 JZ59. 滑动窗口的最大值 方法一:滑动窗口+哈希表(推荐使用) 知识点1:滑动窗口 滑动窗口是指在数组、 展开全文
头像 designeer
发表于 2021-11-12 11:17:17
方法一:动态规划 + 哈希表 哈希表统计: 遍历字符串 s 时,使用哈希表(记为 dic )统计 各字符最后一次出现的索引位置 。 左边界 i获取方式: 遍历到 s[j]时,可通过访问哈希表 dic[s[j]]获取最近的相同字符的索引 i。 复杂度分析: 时间复杂度 O(N) : 其中 N 展开全文
头像 在写文章的里根很想在家办公
发表于 2021-11-05 09:23:03
思路: dp[i]表示的是以i结尾的最长不含重复字符的子字符串。使用了hashmap这个数据结构记录<char,index> 如果map中没有当前这个元素,那么dp[i]=dp[i-1]+1 如果map中存在当前的元素,一开始的想法是 dp[i]=i-map.get(array[i]), 展开全文
头像 每天学习一点
发表于 2021-12-15 15:31:52
动态规划+哈希表,看到很多题解都用了数组来保存当前为结尾的最长结果,其实可以更加优化。当出现重复字符时,只需要更新最近的相同字符作为长度计算起点,然后每次更新最长不同字符字串长度值即可。 int start = -1, sub = 1; //哈希表存储字符和字符位置的 展开全文
头像 wkkw
发表于 2022-02-12 19:38:19
这个很快就找到解决方案了,之前存在一个bug,导致几个用例过去不了。看了别人的解法才发现bug在哪。 解决方法: 1.用字典来存储字符的位置 2.默认起始位置为0,最大长度为0 3.遍历字符串    如果存在过该字符,说明可能需要更新起始位置。起始位 展开全文
头像 不要问我菜不菜
发表于 2021-11-15 15:41:56
public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ int lengthOfLon 展开全文
头像 卡2
发表于 2021-11-29 15:31:00
当出现重复字符,以它后面的字符为开始进行初始化 import java.util.*; public class Solution { public int lengthOfLongestSubstring (String s) { // write code here 展开全文
头像 passway
发表于 2022-01-26 15:29:37
使用队列的方法,将字符串中的字符依次放入队列中,放入前判断队列中是否已经存在该值.若存在该值,计算当前的最大长度。然后队列出的方式不断将元素排出直到已经存在的那个元素被排出。 # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param s string字 展开全文
头像 apple爆了
发表于 2021-11-25 17:36:55
dp表当前为结尾的最长结果 讨论两种情况: 1,之前不存在,就拼接在后面 2,之前存在,再分两种讨论 a 出现过的字符在最长结果里 b 出现过的字符不在最长结果里 public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 展开全文
头像 Python_zhang
发表于 2022-03-09 09:24:52
int lengthOfLongestSubstring(char* s) { //dp[i],下标为i的字符作为结尾的最长字符串长度 //用hash表记录字符最后出现位置 int hash[128]; memset(hash, -1, sizeof(hash)); 展开全文
头像 kyzheng
发表于 2022-03-28 11:19:13
双指针解法 通过所有算例,耗时短,供参考 def lengthOfLongestSubstring(self , s: str) -> int: cnt = 1 i = 0 k = 1 while i & 展开全文

问题信息

难度:
87条回答 3846浏览

热门推荐

通过挑战的用户

查看代码