要求
给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1 。
子字符串 是字符串中的一个连续字符序列。
示例 1:
输入:s = "aa"
输出:0
解释:最优的子字符串是两个 'a' 之间的空子字符串。
示例 2:
输入:s = "abca"
输出:2
解释:最优的子字符串是 "bc" 。
示例 3:
输入:s = "cbzxy"
输出:-1
解释:s 中不存在出现出现两次的字符,所以返回 -1 。
示例 4:
输入:s = "cabbac"
输出:4
解释:最优的子字符串是 "abba" ,其他的非最优解包括 "bb" 和 "" 。
提示:
- 1 <= s.length <= 300
- s 只含小写英文字母
核心代码
class Solution:
def maxLengthBetweenEqualCharacters(self, s: str) -> int:
ans = -1
dic = {}
for i,ch in enumerate(s):
if ch in dic:
ans = max(ans,i - dic[ch] - 1)
else:
dic[ch] = i
return ans
解题思路:(哈希表) O(n) 建立一个哈希表记录每个字符最早出现的位置。遍历数组,如果当前字符不是第一次出现,那么用当前位置减去第一次出现的位置再减 1 来更新答案。时间复杂度:遍历一次数组,故时间复杂度为 O(n)。空间复杂度:仅需要常数的额外空间。