Keshawn_lu's Blog

Leetcode 5396. 连续字符

字数统计: 341阅读时长: 1 min
2020/05/16 Share

题目简介:

给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。

请你返回字符串的能量。

示例 1:

1
2
3
输入:s = "leetcode"
输出:2
解释:子字符串 "ee" 长度为 2 ,只包含字符 'e' 。

示例 2:

1
2
3
输入:s = "abbcccddddeeeeedcba"
输出:5
解释:子字符串 "eeeee" 长度为 5 ,只包含字符 'e' 。

示例 3:

1
2
输入:s = "triplepillooooow"
输出:5

示例 4:

1
2
输入:s = "hooraaaaaaaaaaay"
输出:11

示例 5:

1
2
输入:s = "tourist"
输出:1

提示:

  • 1 <= s.length <= 500
  • s 只包含小写英文字母。

思路:

用哈希表来保存出现连续字符的次数,需要注意的是,如果s[i] != s[i + 1],即下一个字符不再连续时,需要清空哈希表中该key存放的value

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
int maxPower(string s) {

unordered_map<char,int> Hash;

if(s[0] == s[1])
Hash[s[0]]++; //开头情况为特例

int count = 1;
for(int i = 1; i < s.length(); i++){

if(s[i + 1] == s[i]){

Hash[s[i]] += 1;
}
else if(s[i - 1] == s[i]) //连续字符的最后一个
Hash[s[i]] += 1;

if(s[i] != s[i + 1]){ //连续字符的最后一个

count = max(count, Hash[s[i]]);
Hash[s[i]] = 0;
}
}

return count;

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