这题要求计算字符串中“最长无重复字符的连续子串”的长度,本质是经典问题:最长不含重复字符的子串。
可用滑动窗口(双指针)+ 记录字符上一次出现位置来做,保证线性时间。
核心做法:
l,遍历右端 r 从左到右扫描字符串。在大规模语料采集与 OCR 处理过程中,每一条文本样本里常常会残留重复出现的页眉、页脚、广告标记或爬虫抓取模板片段。这些重复内容会对模型训练质量造成明显影响。为了衡量一条样本受重复噪声影响的程度,我们引入以下简化指标。
对于文本样本 s,如果一个连续子串中任意两个字符都不相同,则称该连续子串为无重复子串。记 s 的所有无重复连续子串中最长的长度为该样本的纯净度指标。纯净度指标越小,说明样本中的重复噪声越严重,越需要优先清洗或剔除。
给定一条文本样本 s,请计算其纯净度指标,也就是最长无重复连续子串的长度。
约束条件:
1 到 10^7 之间。输入仅有一行,包含一个字符串 s。该字符串由 ASCII 字母和数字组成,且不含空格。
输出一个整数,表示 s 中最长无重复连续子串的长度。
输入
abcabcbb
输出
3
说明
从第 1 个字符到第 3 个字符的连续子串 abc 中没有重复字符,长度为 3。
继续向右扩展到第 4 个字符 a 时,会与第 1 个字符重复。之后即使调整起点,能得到的无重复连续子串长度也不会超过 3,因此答案为 3。
输入
aaaa
输出
1
说明
输入字符串由 4 个相同的 a 组成,任何长度大于 1 的连续子串都会包含重复字符。
因此最长无重复连续子串只能取单个字符,长度为 1。
输入
z
输出
1
说明
输入只有 1 个字符,连续子串本身就是 z,其中不存在重复字符。
因此最长无重复连续子串长度为 1。
输入
A1b2A3
输出
5
说明
输入字符串共有 6 个字符。从第 2 个字符到第 6 个字符的连续子串由字符 1、b、2、A、3 组成,这 5 个字符均不同,长度为 5。
如果从第 1 个字符开始扩展到第 5 个字符,会包含两个 A,不满足无重复条件。因此最长无重复连续子串长度为 5。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册