Я пытаюсь решить задачу программирования, описанную ниже, в которой в основном вам нужно найти слово в данном предложении с наибольшим количеством повторяющихся символов. Я немного потрудился с этим, и мне посчастливилось найти код для подсчета появления букв в строке (также ниже). Этот конкретный кусок кода хранит все буквы в HashMap, и мне нужно адаптировать его так, чтобы он сохранял появление символа каждого слова отдельно (а не в совокупности, как это делается на данный момент). Вот где я застрял. Что я могу использовать для хранения состояния HashMap с каждой итерацией цикла?Сохранение значений hashmap как итераций программы
/* Using the Java language, have the function LetterCountI(str) take
* the str parameter being passed and return the first word with the
* greatest number of repeated letters. For example: "Today, is the
* greatest day ever!" should return greatest because it has 2 e's
* (and 2 t's) and it comes before ever which also has 2 e's. If there
* are no words with repeating letters return -1. Words will be
* separated by spaces. */
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class OtherCountLetters {
void countLetters2(String str) {
String[] words = str.toLowerCase().split(" ");
Map<Character, Integer> numChars = new HashMap<Character, Integer>();
for (int i = 0; i < words.length; i++) {
for (int j = 0; j < words[i].length(); j++) {
char charAt = words[i].charAt(j);
if (!numChars.containsKey(charAt)) {
numChars.put(charAt, 1);
} else {
numChars.put(charAt, numChars.get(charAt) + 1);
}
}
}
System.out.println(numChars);
}
public static void main(String[] args) {
OtherCountLetters ocl = new OtherCountLetters();
ocl.countLetters2("Today is the greatest day ever");
}
}
На данный момент для предложения «сегодня величайший день когда-либо», программа возвращает
{v=1, g=1, d=2, e=5, t=4, s=2, r=2, a=3, o=1, h=1, y=2, i=1}
Но мне нужно, чтобы вернуть что-то вроде
{a=1, d=1, o=1, t=1, y=1} //'today'
{i=1, s=1} //'is'
{e=1, h=1, t=1} //'the'
{g=1, t=2, e=2, s=1, r=1, a=1} //'greatest'
{d=1, a=1, y=1} //'day'
{v=1, e=2, r=1} //'ever'
этак , Я мог бы перебирать каждую запись, чтобы увидеть, какое из них имеет наибольшее значение, а затем вернуть соответствующее слово пользователю.
Спасибо,
----- EDIT ----
После размещения этого я имел Эврика момент:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class OtherCountLetters {
void countLetters2(String str) {
String[] words = str.toLowerCase().split(" ");
String target = null;
int largest = 0;
Map<Character, Integer> numChars = new HashMap<Character, Integer>();
for (int i = 0; i < words.length; i++) {
for (int j = 0; j < words[i].length(); j++) {
char charAt = words[i].charAt(j);
if (!numChars.containsKey(charAt)) {
numChars.put(charAt, 1);
} else {
numChars.put(charAt, numChars.get(charAt) + 1);
}
if (numChars.get(charAt) > largest) {
largest = numChars.get(charAt);
target = words[i];
}
}
numChars.clear();
}
if (largest != 1) {
System.out.println(target);
} else {
System.out.println("there are no words with 2 or more letters");
}
}
public static void main(String[] args) {
OtherCountLetters ocl = new OtherCountLetters();
ocl.countLetters2("today is the greatest day ever and car");
}
}