2017-10-02 1 views
0

Ich muss eine Zeichenfolge als Eingabe akzeptieren, es in ein Array einzelner Wörter (aufgeteilt auf "") aufteilen und das Wort mit der höchsten Bewertung als Zeichenfolge zurückgeben. Jeder Buchstabe eines Wortes erhält Punkte entsprechend seiner Position im Alphabet: a = 1, b = 2, c = 3 usw. Wenn zwei Wörter gleich ausfallen, gebe ich das Wort zurück, das am frühesten in der ursprünglichen Zeichenfolge erscheint. Alle Buchstaben sind Kleinbuchstaben und alle Eingaben sind gültig.Java: Find String mit dem höchsten Wert

Zuerst entschied ich, dass, ob ich eine Zeichenfolge basierend auf seinem Gesamtwert wie oben angegeben, oder verwenden Sie einfach den ASCII-Wert, das Ergebnis wird das gleiche sein. Also wähle ich den ASCII-Wert, um die Dinge einfacher zu machen. Ich wandle jedes Wort in ein Zeichenfeld und die Schleife durch, um die Summe zu summieren. Dann lege ich das Wort und die Summe in eine Hashmap. Der nächste Teil, an dem ich festhalte. Wie durchlaufe ich die Hashmappe, um den größten Wert zu finden, und nimm dann das zugehörige Wort? Dies ist ein Kate von einer Code-Kata-Site. Ich bin frei, die Mittel zu benutzen, die ich wählen werde, um sie zu lösen. Also bin ich nicht mit der Hashmap-Idee verheiratet.

Vorschläge?

Hier ist mein Code so weit:

public static String high(String s) { 
    // Your code here... 


     HashMap<String, Integer> map = new HashMap<String, Integer>(); 
     String[] words = s.split(" "); 

     // loop through all of the words, for each word get its value 
     // and insert the word into map as key, value as that keys value 
     for(int i = 0; i < words.length; i++) { 
      char[] tempWordChars = words[i].toCharArray(); 
      int total = 0; 
      for(int j = 0; j < tempWordChars.length; j++) { 
      total = total + (int)tempWordChars[j]; 
      } 

      map.put(tempWordChars.toString(), total); 

     } 

     return ""; 
     } 
+1

Nein, ein Wort mit Schreiben Position Scoring ist nicht das gleiche, wie es von ascii Wert Scoring. Wenn Sie zum Beispiel nach der Buchstabenposition punkten, ist "xy" (49) höher als "abc" (6); Wenn Sie jedoch mit dem ASCII-Wert punkten, ist "abc" höher als "xy".Sie müssen klären, was Sie wirklich benötigen, bevor die Leute anfangen zu antworten. –

Antwort

1

So etwas So

Entry<String,Integer> maxTerm = null; 

for(Entry<String,Integer> entry : hashMap.entrySet()) { 

    if (maxTerm == null || entry.getValue() > maxTerm.getValue()) { 
     maxTerm = entry; 
    } 
} 

String wordFound = maxTerm.getKey(); 
int wordScore = maxTerm.getValue(); 

arbeiten, sollten Sie die hashmap durchlaufen, wobei jeder Eintrag greifen, und wenn der Eintrag einen Wert hat, ist größer als alle vorherigen, greifen Sie den Eintrag und Sie können den Wert und den Schlüssel daraus sammeln und verwenden, wie Sie möchten.

2

versuchen dieses

public static String high(String s) { 

     String[] words = s.split(" "); 
     int max = 0; 
     String sToReturn = null; 
     for (String word : words) { 
      char[] tempWordChars = word.toCharArray(); 
      int total = 0; 
      for (int j = 0; j < tempWordChars.length; j++) { 
       total = total + (int) tempWordChars[j]; 
      } 
      if (total > max) { 
       sToReturn = word; 
       max=total; 
      } 

     } 

     return sToReturn; 
    } 
2

Mit java8

key = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();  

System.out.println("Key : "+key+ " Maximum value : "+map.get(key)); 
2

Wenn Sie nicht über die anderen Saiten kümmern, das heißt, sie wertlos sind, wenn ein neues High-Score-Wort gefunden wird und nur brauchen die höchstwertige Zeichenfolge, hashmap ist ein Overkill. Überquere die Eingabe Wort für Wort und zähle jedes Wort. Wenn du ein Wort mit höherer Punktzahl findest, aktualisiere deine Ausgabe, ansonsten fahre bis zum Ende fort.

Wenn Sie alle Zeichenfolgen mit ihrer Punktzahl behalten möchten, dann: Um das Wort mit dem maximalen Wert zusammen mit dem Wort zu erhalten, können Sie eine Prioritätswarteschlange (dh einen Max-Heap) verwenden der Welt. Erstellen Sie ein Wort- und Ergebnispaar und fügen Sie es in die Prioritätswarteschlange ein.

Hinweis: Sie müssen einen Komparator für die Warteschlange schreiben.

Zweitens, mit diesem Ansatz erhalten Sie sortierte Ausgabe jedes Mal, wenn Sie die Zeichenfolge extrahieren.

1

Java8 Verwendung,

import static java.util.Arrays.stream; import static java.util.Comparator.comparing; /* * Method to return highest scored word(which is defined * as sum of ASCII value of alphabets in word). * In case no word is present, Empty String is returned. */

public static String high(String s) { 
    return stream(s.split("\\W+")) 
      .max(comparing(str -> str.chars().sum())) 
      .orElse(""); 
} 

`

Verwandte Themen