2016-08-19 5 views
0

Ich schaue auf die Frage "Code schreiben, um die doppelten Zeichen in einer Zeichenfolge ohne Verwendung eines zusätzlichen Puffers zu entfernen" in der Cracking Coding Book.entfernen doppelte Zeichen in einer Zeichenfolge

ich ein Programm mit der Lösung in dem Buch geschrieben habe:

public class test { 
    public static void main(String[] args) { 
     String str = "aaabbb"; 
     char[] charArray = str.toCharArray(); 
     System.out.println(charArray); 
     remove_V(charArray); 
     System.out.println(charArray); 
    } 

    public static void remove_V(char[] str) { 
     if (str == null) return; 
     int len = str.length; 
     if (len < 2) return; 
     int tail = 1; 
     for (int i = 1; i < len; ++i) { 
      int j; 
      for (j = 0; j < tail; ++j) { 
       if (str[i] == str[j]) break; 
      } 
      if (j == tail) { 
       str[tail] = str[i]; 
       ++tail; 
      } 
     } 
     str[tail] = 0; 
    } 

} 

testete ich das Programm mit „aaabbb“, aber die Ausgabe ich erhielt, war „abbb“. Bedeutet das, dass das Programm falsch ist?

+1

Dies wird Ihnen helfen: http://stackoverflow.com/questions/4989091/removing-duplicates- von einer Zeichenkette in Java – d3r1ck

Antwort

0

Das Problem ist der letzte Befehl der Methode remove_V. Sie setzen mit '0' nur die letzte Position von str array, die durch den letzten Wert von tail bestimmt wird. Eigentlich ist es notwendig, alle Schwanzpositionen zu reinigen, d. von der Position, die dem letzten Wert des Schwanzes entspricht, bis zur letzten Position des Str-Arrays (len-1). So ändern

str[tail] = 0; 

zu so etwas wie dieses

for (int i = tail; i < len; ++i) 
    str[i] = 0; 
0

In diesem Fall können Sie die java charAt() mit einer for-Schleife verwenden können, müssen Sie nicht zwei nur für Schleife und wenn Block.

Sie müssen die Logik mit zwei Dingen einfach machen. ein vorheriger Wert - um das vorherige Zeichen darin zu speichern und wenn Block um Zeichenwerte zu speichern, die nicht gleich dem vorherigen Zeichen sind.

public static void main(String[] args) { 
    String str = "aaabbb"; 
    String str2 = "aaabbkkbmoouse"; 
    System.out.println(remDup(str)); 
    System.out.println(remDup(str2)); 
} 

public static String remDup(String str){ 
    String res = ""; // final resulting groups of chars 
    char prev = '-'; 
    for(int i = 0; i < str.length(); i++){ 
     if (str.charAt(i) != prev) { // not equal to previous to store to previous and add to results. 
      prev = str.charAt(i); 
      res += prev; 
     } 

    } 
    return res; 
} 

OUTPUT

str: ab

str2: abkbmouse

Verwandte Themen