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; } }