首页 > 试题广场 >

查找无重复最长子串

[编程题]查找无重复最长子串
  • 热度指数:6234 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串,请找出其中长度最长且不含有重复字符的子串,计算该子串长度。

数据范围:输入的字符串长度满足 ,字符串中仅包含小写的英文字母

输入描述:
输入类型为字符串,例如”abcde“


输出描述:
输出类型为整型, 例如 5
示例1

输入

pwwkew

输出

3

说明

无重复字符的最长子串是"kew",其长度为 3 
头像 Norewyx
发表于 2022-03-15 19:24:51
这应该是我见过最巧妙的解法 s = input() cur,res = [],0 for r in range(len(s)): while s[r] in cur: cur.pop(0) cur.append(s[r]) res = max(len(cur) 展开全文
头像 白伟仝
发表于 2020-05-09 12:13:50
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String s = sc. 展开全文
头像 牛客850325130号
发表于 2022-06-14 17:57:31
这道题看似通过set这种去重,然后求size能得到结果,但有个问题,在set集合clear的时候有可能把后面不重复的数据清除。 比如pwpae,最长应该是wpae,但用set的话第二个p进入时会把pw都清空,因此会少1。 思路就是方一个窗口从左到右不断滑动,遇到重复的一定是左边重 展开全文
头像 _Bingbong
发表于 2024-12-31 16:07:44
解题思路 这是一个经典的滑动窗口问题,需要: 滑动窗口策略: 使用两个指针( 和 )维护一个窗口 右指针不断向右扩展,直到遇到重复字符 左指针向右移动,直到删除重复字符 字符记录: 使用数组或哈希表记录每个字符最后出现的位置 当遇到重复字符时,更新左指针位置 最大长度更新: 在 展开全文
头像 小菜鸟很讲道理
发表于 2025-09-12 15:07:26
import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Scanner; import java.util.Set; // 注意类名必须为 Main, 不要有任何 pack 展开全文
头像 .201808171525121
发表于 2020-07-26 18:16:20
思路:1.把string转为charArray,遍历char元素2.使用set保存char,并判断是否包含当前遍历的元素3.元素重复时,用当前set的长度,对比历史最大长度,确定最大长度4.输出最大长度 import java.util.*; public class Main{ //长度 展开全文