مساله:
رشته s به شما داده می شود، برای این رشته بیشترین تعداد کاراکتر مشابه پشت سر هم که تکرار شده است را پیدا کنید و به صورت زیر برگردانید:
Object[]{c, l}; c: کاراکتر با بیشترین تعداد تکرار l: تعداد بیشترین تکرار
اگر چند کاراکتر با بیشترین تعداد تکرار وجود دارد به ترتیب نمایش اولین را انتخاب کنید.
برای رشته خالی عبارت زیر را چاپ کنید:
Object[]{"", 0}
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}
Happy coding! 🙂
import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class Solution { public static Object[] longestRepetition(String s) { String[] arr = s.split("(?<=(.))(?!\\1)"); int size = Arrays.stream(arr).max(Comparator.comparingInt(String::length)).get().length(); if (size > 0) { List<String> list = Arrays.stream(arr).collect(Collectors.groupingBy(String::length)).entrySet().stream() .max(Comparator.comparingInt(e -> e.getKey())).get().getValue(); return new Object[] { "" + list.get(0).charAt(0), size }; } return new Object[] { "", 0 }; } }
public class Solution { public static Object[] longestRepetition(String s) { if (s.isEmpty()) return new Object[]{"", 0}; int max = 1,low=1; char current = s.charAt(0),high = s.charAt(0); for (int i = 1; i < s.length(); i++) { if (current == s.charAt(i)) { max++; }else{ max=1; } if(max>low){ low=max; high=current; } current=s.charAt(i); } if(max>low){ high=current; low=max; } return new Object[]{String.valueOf(high), low}; } }
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; } }
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Solution { private static final Pattern PATTERN = Pattern.compile("(.)(\\1*)"); public static Object[] longestRepetition(String s) { Object[] result = new Object[]{"", 0}; Matcher matcher = PATTERN.matcher(s); while (matcher.find()) { if (matcher.group().length() > (int) result[1]) { result[0] = matcher.group().substring(0, 1); result[1] = matcher.group().length(); } } return result; } }
import java.util.*; public class Solution { public static Object[] longestRepetition(String s) { int count = 1; int max = 0; String result = ""; for (int i = 0; i < s.length() - 1; i++) { if (s.substring(i, i + 1).equals(s.substring(i + 1, i + 2))) { count++; if (count > max) { max = count; result = s.substring(i + 1, i + 2); } } else { count = 1; } } return new Object[]{result, max}; } }