LeetCode每日一题——1624. 两个相同字符之间的最长子字符串

简介: 子字符串 是字符串中的一个连续字符序列。

题目

给你一个字符串 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:
        tmp,ans = {}, -1
        for i in range(len(s)):
          # 哈希表中存在
            if tmp.get(s[i]) is not None:
              # 取值,求最大长度
                ans = max(ans, i - tmp[s[i]] - 1)
            # 哈希表中不存在
            else:
              # 存字符与对应位置
                tmp[s[i]] = i
        return ans
目录
相关文章
|
2月前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
34 6
|
2月前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
23 0
|
14天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
24 1
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
18天前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符
|
2月前
|
网络协议
《 LeetCode 热题 HOT 100》——无重复字符的最长子串
《 LeetCode 热题 HOT 100》——无重复字符的最长子串
|
2月前
|
存储
leetcode2744. 最大字符串配对数目
leetcode2744. 最大字符串配对数目
17 0
|
2月前
|
机器学习/深度学习 NoSQL Shell
力扣刷题-翻转字符串
力扣刷题-翻转字符串
12 1
|
2月前
|
算法 Java
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
23 0
|
2月前
|
Go C++
【力扣】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
【2月更文挑战第17天】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
31 8

热门文章

最新文章