Keshawn_lu's Blog

Leetcode 1624. 两个相同字符之间的最长子字符串

字数统计: 285阅读时长: 1 min
2022/09/17 Share

题目简介:

给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1

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

示例 1:

1
2
3
输入:s = "aa"
输出:0
解释:最优的子字符串是两个 'a' 之间的空子字符串。

示例 3:

1
2
3
输入:s = "cbzxy"
输出:-1
解释:s 中不存在出现出现两次的字符,所以返回 -1 。

提示:

  • 1 <= s.length <= 300
  • s 只含小写英文字母

思路:

记录下每个字符第一次出现的位置,然后寻找最后一次出现的位置,并取长度的最大值即可。

tip:

  • 两个字符之间的子字符串可以包含该字符。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
int maxLengthBetweenEqualCharacters(string s) {

unordered_map<char, int> map;

int res = -1;
for(int i = 0; i < s.size(); ++i){

if(map[s[i]] == 0)
map[s[i]] = i + 1;
else{

int now_length = i - map[s[i]];
res = max(res, now_length);
}
}

return res;

}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: