مساله:
رشته s به شما داده می شود، برای این رشته بیشترین تعداد کاراکتر مشابه پشت سر هم که تکرار شده است را پیدا کنید و به صورت زیر برگردانید:
x
3
1
Object[]{c, l};
2
c: کاراکتر با بیشترین تعداد تکرار
3
l: تعداد بیشترین تکرار
اگر چند کاراکتر با بیشترین تعداد تکرار وجود دارد به ترتیب نمایش اولین را انتخاب کنید.
برای رشته خالی عبارت زیر را چاپ کنید:
1
1
1
Object[]{"", 0}
For a given string s find the character c (or C) with longest consecutive repetition and return:
1
2
1
Object[]{c, l};
2
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:
1
1
1
Object[]{"", 0}
Happy coding!
Java
1
19
19
1
import java.util.Arrays;
2
import java.util.Collections;
3
import java.util.Comparator;
4
import java.util.List;
5
import java.util.stream.Collectors;
6
7
public class Solution {
8
public static Object[] longestRepetition(String s) {
9
String[] arr = s.split("(?<=(.))(?!\\1)");
10
11
int size = Arrays.stream(arr).max(Comparator.comparingInt(String::length)).get().length();
12
if (size > 0) {
13
List<String> list = Arrays.stream(arr).collect(Collectors.groupingBy(String::length)).entrySet().stream()
14
.max(Comparator.comparingInt(e -> e.getKey())).get().getValue();
15
return new Object[] { "" + list.get(0).charAt(0), size };
16
}
17
return new Object[] { "", 0 };
18
}
19
}
Java
1
25
25
1
public class Solution {
2
public static Object[] longestRepetition(String s) {
3
if (s.isEmpty()) return new Object[]{"", 0};
4
int max = 1,low=1;
5
char current = s.charAt(0),high = s.charAt(0);
6
for (int i = 1; i < s.length(); i++) {
7
if (current == s.charAt(i)) {
8
max++;
9
}else{
10
max=1;
11
}
12
if(max>low){
13
low=max;
14
high=current;
15
}
16
current=s.charAt(i);
17
}
18
if(max>low){
19
high=current;
20
low=max;
21
}
22
return new Object[]{String.valueOf(high), low};
23
}
24
}
25
Java
1
16
16
1
public class Solution {
2
3
public static Object[] longestRepetition(String s) {
4
char lastch = '\0';
5
Object ret[] = new Object[]{"", 0};
6
int n = 0, max = 0;
7
for (char c : s.toCharArray()) {
8
n = lastch == c ? ++n : 1;
9
if (n > max) { ret = new Object[]{""+c,n}; max = n; }
10
lastch = c;
11
}
12
return ret;
13
}
14
15
}
16
Java
1
19
19
1
import java.util.regex.Matcher;
2
import java.util.regex.Pattern;
3
4
public class Solution {
5
private static final Pattern PATTERN = Pattern.compile("(.)(\\1*)");
6
7
public static Object[] longestRepetition(String s) {
8
Object[] result = new Object[]{"", 0};
9
Matcher matcher = PATTERN.matcher(s);
10
while (matcher.find()) {
11
if (matcher.group().length() > (int) result[1]) {
12
result[0] = matcher.group().substring(0, 1);
13
result[1] = matcher.group().length();
14
}
15
}
16
return result;
17
}
18
}
19
Java
1
24
24
1
import java.util.*;
2
3
public class Solution {
4
public static Object[] longestRepetition(String s) {
5
6
int count = 1;
7
int max = 0;
8
String result = "";
9
for (int i = 0; i < s.length() - 1; i++) {
10
if (s.substring(i, i + 1).equals(s.substring(i + 1, i + 2))) {
11
count++;
12
if (count > max) {
13
max = count;
14
result = s.substring(i + 1, i + 2);
15
}
16
} else {
17
count = 1;
18
}
19
20
}
21
return new Object[]{result, max};
22
}
23
}
24