题目链接

最常见的单词

题目描述

image.png

实现代码

个人代码,未AC,因为在力扣的编译器中没法使用StringTokenizer:

  1. class Solution {
  2. public String mostCommonWord(String paragraph, String[] banned) {
  3. Map<String, Integer> map = new HashMap<>(paragraph.length());
  4. StringTokenizer tokenizer = new StringTokenizer(paragraph, " ");
  5. Set<String> container = new HashSet<>();
  6. for(String s : banned) {
  7. container.add(s);
  8. }
  9. int max = 0;
  10. String result = null;
  11. while (tokenizer.hasMoreTokens()) {
  12. String token = tokenizer.nextToken().replaceAll("[^a-zA-Z]", "").toLowerCase();
  13. if(container.contains(token)){
  14. continue;
  15. }
  16. Integer count = map.get(token);
  17. Integer newCount = (count == null ? 1 : count+1);
  18. map.put(token, newCount);
  19. if(max < newCount) {
  20. max = newCount;
  21. result = token;
  22. }
  23. }
  24. return result;
  25. }
  26. }

官方实现代码:

  1. class Solution {
  2. public String mostCommonWord(String paragraph, String[] banned) {
  3. Set<String> bannedSet = new HashSet<String>();
  4. for (String word : banned) {
  5. bannedSet.add(word);
  6. }
  7. int maxFrequency = 0;
  8. Map<String, Integer> frequencies = new HashMap<String, Integer>();
  9. StringBuffer sb = new StringBuffer();
  10. int length = paragraph.length();
  11. for (int i = 0; i <= length; i++) {
  12. if (i < length && Character.isLetter(paragraph.charAt(i))) {
  13. sb.append(Character.toLowerCase(paragraph.charAt(i)));
  14. } else if (sb.length() > 0) {
  15. String word = sb.toString();
  16. if (!bannedSet.contains(word)) {
  17. int frequency = frequencies.getOrDefault(word, 0) + 1;
  18. frequencies.put(word, frequency);
  19. maxFrequency = Math.max(maxFrequency, frequency);
  20. }
  21. sb.setLength(0);
  22. }
  23. }
  24. String mostCommon = "";
  25. Set<Map.Entry<String, Integer>> entries = frequencies.entrySet();
  26. for (Map.Entry<String, Integer> entry : entries) {
  27. String word = entry.getKey();
  28. int frequency = entry.getValue();
  29. if (frequency == maxFrequency) {
  30. mostCommon = word;
  31. break;
  32. }
  33. }
  34. return mostCommon;
  35. }
  36. }