The challenge
Given a string s
, the power of the string is the maximum length of a non-empty substring that contains only one unique character.
Return the power of the string.
Example 1:
Input: s = "meetme" 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.
Example 3:
Input: s = "triplepillooooow" Output: 5
Example 4:
Input: s = "hooraaaaaaaaaaay" Output: 11
Example 5:
Input: s = "tourist" Output: 1
Constraints:
1 <= s.length <= 500
s
contains only lowercase English letters.
The solution in Java code
We could look at something like this:
class Solution {
public int maxPower(String s) {
int max = 1;
for(int i=0,j=1; j<s.length(); j++){
if(s.charAt(i)!=s.charAt(j)){
max = Math.max(j-i,max);
i=j;
}
}
return Math.max(j-i,max);
}
}
But in cases like eeeee
, we would expect a return of 5
, but would instead get 1
back.
So let’s revisit:
class Solution {
public int maxPower(String s) {
int max = 1;
int cnt = 1;
char prv = s.charAt( 0 );
for( int i = 1; i < s.length(); i++) {
if( prv == s.charAt( i ) ) {
max = Math.max( ++cnt, max );
continue;
}
prv = s.charAt( i );
cnt = 1;
}
return max;
}
}
A possible third option would be to do something like this:
class Solution {
public int maxPower(String s) {
int max=1;
for(int i=1; i<s.length(); i++){
int count=1;
while(i < s.length() && s.charAt(i-1) == s.charAt(i)){
count++;
i++;
max=Math.max(count, max);
}
}
return max;
}
}