Je suis en train de mettre en œuvre actuellement le codage de la longueur d'exécution pour la compression de texte et mon algorithme renvoie des chaînes de la forme suivante:
Disons que nous avons une chaîne comme entrée P> Ensuite, mon algorithme retourne p> maintenant, je veux appliquer Java String Split pour résoudre ceci, car je veux obtenir le nombre le plus élevé correspondant au caractère. Pour notre exemple, ce serait p> ma fonction peut être vu ci-dessous p>
4 Réponses :
au lieu du tampon de chaîne, vous pouvez utiliser une carte, il sera beaucoup plus facile et propre à le faire.
A=5 B=4 C=8 A=3 B=3 D=2 5=2 6=2 7=2 C=4 z=1
Vous pouvez accepter la réponse si vous pensez que cela vous donne une solution propre et meilleure.
Votre réponse échoue à AAAAABBBBCCCCCCCAAA CODE>. Il essaie de faire un algorithme de compression. Votre méthode donne
8a4b8c code> et serait étendu à
AAAAAAAAABBBCCCCCCCC code>.
@Wjs j'ai fait les rectifications :) Merci, je n'ai pas remarqué sa logique de compression.
L'instruction d'impression mise à jour doit être ajoutée à deux endroits avec un ajustement de charat approprié. Résout le problème du chiffre que j'ai mentionné.
@WJS J'ai vu les mises à jour l'exemple AAAAAABBBBCCCCCCCAAAABBBDD556677CCCCCCCCCCCCCAAAABBBBDD556677CCCCCCCCCCCCCAAAAABBBBDDD5566777CCCCCCZ. Le résultat a été pris en charge à l'aide de l'instruction Imprimer que j'ai spécifié à remplacer.
public static String getStrfinal(){ StringBuilder sb = new StringBuilder(); char last = 0; int count = 0; for(int i = 0; i < str.length(); i++) { if(i > 0 && last != str.charAt(i)) { sb.append(count + "" + last); last = 0; count = 1; } else { count++; } last = str.charAt(i); } sb.append(count + "" + last); return sb.toString(); }
Voici une solution possible. Il commence avec la chaîne brute et iTère simplement à travers la chaîne. mais un problème avec cette méthode et d'autres est ce qui se passe s'il y a des chiffres dans le texte? Par exemple. Et si la chaîne est aaabb999222aaa code> qui compresserait
3a2b39323a code>. Cela pourrait également signifier
aaabb code> suivi de
39 3's code> et
23 a code> p> p> p>
J'ai mis à jour ma réponse pour la même chose (y compris le nombre de nombres), j'ai un look si ça va
C'est l'une des solutions possibles à votre question. Nous pouvons utiliser une structure de données LinkedHashMap qui est similaire à HASHMAP, mais elle maintient également la commande. Nous pouvons donc traverser la chaîne et stocker la survenue de chaque caractère en tant que paire de clés dans la carte et récupérer facilement avec son occurrence maximale.
public String getStrFinal(String str){ if(str==null || str.length()==0) return str; LinkedHashMap<Character,Integer> map = new LinkedHashMap<>(); StringBuilder sb=new StringBuilder(); // to store the final string for(char ch:str.toCharArray()){ map.put(ch,map.getOrDefault(ch,0)+1); // put the count for each character } for(Map.Entry<Character,Integer> entry:map.entrySet()){ // iterate the map again and append each character's occurence into stringbuilder sb.append(entry.getValue()); sb.append(entry.getKey()); } System.out.println("String = " + sb.toString()); // here you go, we got the final string return sb.toString(); }
J'ai une réponse mise à jour qui prend en charge les chiffres dans la ligne de chaîne a un look