The challenge
For a given string s
find the character c
(or C
) with longest consecutive repetition and return:
Object[]{c, l};
where l
(or L
) is the length of the repetition. If there are two or more characters with the same l
return the first in order of appearance.
For empty string return:
Object[]{"", 0}
Test cases
import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
import org.junit.runners.JUnit4;
public class SolutionTest {
@Test
public void exampleTests() {
assertArrayEquals(new Object[]{"a", 4}, Solution.longestRepetition("aaaabb"));
assertArrayEquals(new Object[]{"a", 4}, Solution.longestRepetition("bbbaaabaaaa"));
assertArrayEquals(new Object[]{"u", 3}, Solution.longestRepetition("cbdeuuu900"));
assertArrayEquals(new Object[]{"b", 5}, Solution.longestRepetition("abbbbb"));
assertArrayEquals(new Object[]{"a", 2}, Solution.longestRepetition("aabb"));
assertArrayEquals(new Object[]{"", 0}, Solution.longestRepetition(""));
}
}
The solution in java
Option 1:
public class Solution {
public static Object[] longestRepetition(String s) {
int len = s.length();
int count = 0;
if (len==0) return new Object[]{"", 0};
char res = s.charAt(0);
for (int i=0; i<len; i++) {
int cur_count = 1;
for (int j=i+1; j<len; j++) {
if (s.charAt(i) != s.charAt(j)) break;
cur_count++;
}
if (cur_count > count) {
count = cur_count;
res = s.charAt(i);
}
}
return new Object[]{Character.toString(res), count};
}
}
Option 2:
public class Solution {
public static Object[] longestRepetition(String s) {
char lastch = '\0';
Object ret[] = new Object[]{"", 0};
int n = 0, max = 0;
for (char c : s.toCharArray()) {
n = lastch == c ? ++n : 1;
if (n > max) { ret = new Object[]{""+c,n}; max = n; }
lastch = c;
}
return ret;
}
}