跳至主要內容

1446. 连续字符


1446. 连续字符

🟢   🔖  字符串  🔗 力扣open in new window LeetCodeopen in new window

题目

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 只包含小写英文字母。

解题思路

通过一次遍历,记录当前连续字符的长度,并在字符变化时更新最大长度,可以高效解决此问题。

  1. 初始化变量:

    • power:记录当前连续字符的长度。
    • prevChar:记录上一个字符,用于判断当前字符是否与上一个字符相同。
    • maxPower:记录最大连续字符的长度。
  2. 遍历字符串:

    • 如果当前字符和 prevChar 相同,递增 power
    • 如果不同,更新 maxPower,重置 power 为 1,并更新 prevChar 为当前字符。
  3. 遍历结束:

    • 遍历完成后,返回 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 的个数[✓]数组🟢🀄️open in new window 🔗open in new window
674最长连续递增序列[✓]数组🟢🀄️open in new window 🔗open in new window
1759统计同质子字符串的数目数学 字符串🟠🀄️open in new window 🔗open in new window
2213由单个字符重复的最长子字符串线段树 数组 字符串 1+🔴🀄️open in new window 🔗open in new window
2229检查数组是否连贯 🔒数组 哈希表 排序🟢🀄️open in new window 🔗open in new window
3168候诊室中的最少椅子数字符串 模拟🟢🀄️open in new window 🔗open in new window