Ça se répète non ?

Cette semaine, c'est Jonathan qui vous propose un #KataOfTheWeek : Compteur de répétitions

Briefing du Kata : À partir d'une chaine de caractère, l'idée est de récupérer toutes les chaines de caractères qui se répètent ainsi que le nombre de fois qu'elles le font.

Par exemple avec la chaine "baobab" on trouvera "ba" deux fois. Et avec "12121" on trouvera 2 fois "121", 2 fois "12" et 2 fois "21".

Saurez-vous résoudre le problème ?

Bon courage !


Et voici une solution proposée par l'auteur en Java :

class Repetition {
    public static final int PATTERN_SIZE_MIN = 2;
    public static final int REPETITION_MIN = 2;

    public static void main(String[] args) {
        String s = "12121";
        IntStream.range(PATTERN_SIZE_MIN, s.length()).boxed()
                .flatMap(patternSize ->
                        IntStream.rangeClosed(0, s.length() - patternSize).mapToObj(i -> Map.entry(i, i + patternSize))
                )
                .collect(Collectors.groupingBy(e -> s.substring(e.getKey(), e.getValue()), Collectors.counting()))
                .entrySet().stream().filter(e -> e.getValue() >= REPETITION_MIN)
                .forEach(System.out::println);
    }
}

Votre équipe TakiVeille

TakiVeille

TakiVeille