The idea is simply to walk the string keeping track of the current count for the item we're evaluating. When we encounter a different character, we check if the item we were evaluating appeared more times than the current max and if so, we set it as the current max.
You can check my Gist for the code (maxRepChar) with tests:
public static Entry maxRepChar(String s){
Entry max = new Entry(), curr = new Entry();
char c;
if(s == null || s.length() == 0) return null;
//initialize with first item in string
curr.count = 0;
curr.c = s.charAt(0);
max.count = 0;
for(int i = 0; i < s.length(); i++){
c = s.charAt(i);
/*
keep incrementing the current counter for the item we're evaluating now
as long as we have a subsequent uninterrupted stream
*/
if(c == curr.c) curr.count++;
else{
/*
when we interrupt the stream, check if the item we're evaluating
appeared more times than the current maximum, if so, set it as max
*/
if(curr.count > max.count){
max.count = curr.count;
max.c = curr.c;
}
//and reset the counter for current item
curr.c = c;
curr.count = 1;
}
}
//don't miss the case when the max run untils end of string
if(curr.count > max.count){
max.count = curr.count;
max.c = curr.c;
}
return max;
}
The Entry class is simply a helper structure:
char c;
int count = 0;
No comments:
Post a Comment
With great power comes great responsibility