题目简介:
给你一个字符串 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 <= 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;
} };
|