1624. 两个相同字符之间的最长子字符串
题目:
给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1 。子字符串 是字符串中的一个连续字符序列。
难度:简单
示例 :
输入:s = "aa"
输出:0
解释:最优的子字符串是两个 'a' 之间的空子字符串。
输入:s = "cbzxy"
输出:-1
解释:s 中不存在出现出现两次的字符,所以返回 -1 。
题解:
题目要求求出两个相同字符之间的最长子字符串的长度。对于字符 \textit{ch}ch,只需要求出 \textit{ch}ch 第一次出现在字符串中的索引位置 \textit{first}first 和最后一次出现在字符串中的索引位置 \textit{last}last,则以 \textit{ch}ch 为相同字符之间的子字符串的最大长度一定为 \textit{last} - \textit{first} - 1last−first−1,我们依次求出所有可能的子字符的长度的最大值即可。我们设数组 \textit{firstIndex}firstIndex 记录每个字符 ii 在字符串中第一次出现的索引,\textit{maxLength}maxLength 表示当前子字符串的最大长度。
初始化时 \textit{firstIndex}firstIndex 中的每个元素都初始化为 -1−1,表示该字符还未出现。
当遍历到第 ii 个字符 \textit{ch}ch 时,如果当前数组中 \textit{firstIndex}[\textit{ch}] = -1firstIndex[ch]=−1,则记录该字符第一次出现的索引为 ii,更新 \textit{firstIndex}[\textit{ch}] = 1firstIndex[ch]=1;如果当前数组中 \textit{firstIndex}[\textit{ch}] \ge 0firstIndex[ch]≥0 时,则表示字符 \textit{ch}ch 之前已经出现过,此时两个 \textit{ch}ch 之间的子字符串长度为 i - \textit{firstIndex}[\textit{ch}] - 1i−firstIndex[ch]−1,同时更新 \textit{maxLength}maxLength。
返回最大的长度 \textit{maxLength}maxLength 即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构