1446. 连续字符
1446. 连续字符
题目
The power of the string is the maximum length of a non-empty substring that contains only one unique character.
Given a string s
, return thepower of s
.
Example 1:
Input: s = "leetcode"
Output: 2
Explanation: The substring "ee" is of length 2 with the character 'e' only.
Example 2:
Input: s = "abbcccddddeeeeedcba"
Output: 5
Explanation: The substring "eeeee" is of length 5 with the character 'e' only.
Constraints:
1 <= s.length <= 500
s
consists of only lowercase English letters.
题目大意
给你一个字符串 s
,字符串的 「能量」 定义为:只包含一种字符的最长非空子字符串的长度。
请你返回字符串 s
的 能量 。
示例 1:
输入: s = "leetcode"
输出: 2
解释: 子字符串 "ee" 长度为 2 ,只包含字符 'e' 。
示例 2:
输入: s = "abbcccddddeeeeedcba"
输出: 5
解释: 子字符串 "eeeee" 长度为 5 ,只包含字符 'e' 。
提示:
1 <= s.length <= 500
s
只包含小写英文字母。
解题思路
通过一次遍历,记录当前连续字符的长度,并在字符变化时更新最大长度,可以高效解决此问题。
初始化变量:
power
:记录当前连续字符的长度。prevChar
:记录上一个字符,用于判断当前字符是否与上一个字符相同。maxPower
:记录最大连续字符的长度。
遍历字符串:
- 如果当前字符和
prevChar
相同,递增power
。 - 如果不同,更新
maxPower
,重置power
为 1,并更新prevChar
为当前字符。
- 如果当前字符和
遍历结束:
- 遍历完成后,返回
max(maxPower, power)
,确保最后一次连续字符长度被正确记录。
- 遍历完成后,返回
复杂度分析
- 时间复杂度:
O(n)
,遍历字符串中的每个字符,复杂度为线性。 - 空间复杂度:
O(1)
,只使用了固定数量的变量,空间复杂度为常数。
代码
/**
* @param {string} s
* @return {number}
*/
var maxPower = function (s) {
let power = 0,
prevChar = s[0];
let maxPower = 0;
for (let char of s) {
if (char === prevChar) {
power++; // 连续字符长度增加
} else {
maxPower = Math.max(maxPower, power); // 更新最大值
power = 1; // 重置连续计数
prevChar = char; // 更新当前字符
}
}
return Math.max(maxPower, power); // 返回最终最大值
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
485 | 最大连续 1 的个数 | [✓] | 数组 | 🟢 | 🀄️ 🔗 |
674 | 最长连续递增序列 | [✓] | 数组 | 🟢 | 🀄️ 🔗 |
1759 | 统计同质子字符串的数目 | 数学 字符串 | 🟠 | 🀄️ 🔗 | |
2213 | 由单个字符重复的最长子字符串 | 线段树 数组 字符串 1+ | 🔴 | 🀄️ 🔗 | |
2229 | 检查数组是否连贯 🔒 | 数组 哈希表 排序 | 🟢 | 🀄️ 🔗 | |
3168 | 候诊室中的最少椅子数 | 字符串 模拟 | 🟢 | 🀄️ 🔗 |