Exemple si j'ai une entrée comme:

Heeeeeeeeeeeellooooo

La sortie doit être:

H9e3e2l5o

C'est le code que j'ai écrit jusqu'à présent:

    public class RLE {
        public static String encode(String s) {
            if (s == "" || s == null) return "";
            StringBuilder sb = new StringBuilder();
            int count = 1;
            char previous = s.charAt(0);
            char current;

            for (int i = 1; i < s.length(); i++) {
                current = s.charAt(i);
                if (current == previous) {
                    count++;
                } else {
                    if (count == 1) {
                        sb.append(previous);
                    } else if (count > 1) {
                        sb.append(count).append(previous);
                        count = 1;
                    }
                }
                previous = current;

            }

            return sb.toString();
        }

Résulte en:

'Heeeeeeeeeeeellooooo' -> H12e2l

-2
Michael Storozhyk 20 avril 2017 à 11:58

3 réponses

Meilleure réponse

Cela fonctionnera pour vous

public static String encode(String s) {
    if (s == "" || s == null)
        return "";
    StringBuilder sb = new StringBuilder();
    int count = 1;
    char previous = s.charAt(0);
    char current;

    for (int i = 1; i < s.length(); i++) {
        current = s.charAt(i);
        if (current == previous) {
            count++;
        } else {
            if (count == 1) {
                sb.append(previous);
            } else if (count > 1) {
                if (count > 9) {
                    sb.append(9).append(previous);
                    sb.append(count - 9).append(previous);
                } else {
                    sb.append(count).append(previous);
                }
                count = 1;
            }
        }
        previous = current;

    }
    sb.append(count).append(previous);
    return sb.toString();
}
2
Satyendra Jain 20 avril 2017 à 09:16

Il vous manque la casse du dernier caractère de la chaîne est égal au caractère précédent, ce qui n'est pas imprimé. Ajouter une logique d'incrémentation dans le cas if (actuel == précédent)

                    if (current == previous) {
                    count++;
                    if(i == s.length()-1){
                        if (count == 1) {
                            sb.append(previous);
                        } else if (count > 1) {
                            sb.append(count).append(previous);
                            count = 1;
                        }
                    }
                }
0
Prashanth Debbadwar 20 avril 2017 à 09:09

Le code est manquant

if (count > 1) {
  sb.append(count);
}
sb.append(previous)

Après la boucle for.

0
Iakov Makarov 20 avril 2017 à 09:08