1446. Consecutive Characters
Description
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 the power 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.
Solutions
Solution 1: Traversal and Counting
We define a variable $\textit{t}$ to represent the length of the current consecutive characters, initially $\textit{t}=1$.
Next, we traverse the string $s$ starting from the second character. If the current character is the same as the previous character, then $\textit{t} = \textit{t} + 1$, and update the answer $\textit{ans} = \max(\textit{ans}, \textit{t})$; otherwise, set $\textit{t} = 1$.
Finally, return the answer $\textit{ans}$.
The time complexity is $O(n)$, where $n$ is the length of the string $s$. The space complexity is $O(1)$.
Python3
class Solution:
def maxPower(self, s: str) -> int:
ans = t = 1
for a, b in pairwise(s):
if a == b:
t += 1
ans = max(ans, t)
else:
t = 1
return ans
Java
class Solution {
public int maxPower(String s) {
int ans = 1, t = 1;
for (int i = 1; i < s.length(); ++i) {
if (s.charAt(i) == s.charAt(i - 1)) {
ans = Math.max(ans, ++t);
} else {
t = 1;
}
}
return ans;
}
}
C++
class Solution {
public:
int maxPower(string s) {
int ans = 1, t = 1;
for (int i = 1; i < s.size(); ++i) {
if (s[i] == s[i - 1]) {
ans = max(ans, ++t);
} else {
t = 1;
}
}
return ans;
}
};
Go
func maxPower(s string) int {
ans, t := 1, 1
for i := 1; i < len(s); i++ {
if s[i] == s[i-1] {
t++
ans = max(ans, t)
} else {
t = 1
}
}
return ans
}
TypeScript
function maxPower(s: string): number {
let ans = 1;
let t = 1;
for (let i = 1; i < s.length; ++i) {
if (s[i] === s[i - 1]) {
ans = Math.max(ans, ++t);
} else {
t = 1;
}
}
return ans;
}