Character with longest consecutive repetition

kata programming

مساله:

رشته 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};
    }
}

دیدگاهتان را بنویسید