У меня есть специальный случай, когда (сохраняя желаемую временную сложность) Мне нужно подсчитать количество раз, когда слово может быть создано из заданной строки. Мой код ниже управляется только один раз, если слова могут быть созданы более одного раза, это не удается. Есть идеи?Количество слов в строке
//String that needs to be searched
String s= "ccoptarra";
//Words that need to be found
String[] words = { "car", "pot", "bag" };
ArrayList count = new ArrayList();
HashMap map = new HashMap();
for (int i = 0; i < words.length; i++) {
count.add(0);
String w = words[i];
map.put(w, "");
for (int j = 0; j < w.length(); j++) {
if (s.contains(String.valueOf(w.charAt(j)))) {
map.put(w, map.get(w).toString() + w.charAt(j));
if (map.get(w).equals(w))
count.add(i, ((int)count.get(i)) + 1);
}
}
}
for (int i = 0; i < count.size(); i++)
System.out.println("Word: " + words[i] + ", count = " + count.get(i));
Выход:
Word: car, count = 1
Word: pot, count = 1
Word: bag, count = 0
Вы можете использовать 'replaceFirst' для замены всех символов из исходной строки, которые находятся в строке для поиска, когда она найдена. Затем повторите поиск. – Hackerdarshi
Я думаю, что подсчет массива бесполезен. map.put (w, ""); ==> map.put (w. new Integer (1)); , и вы можете использовать Integer (1) как счетчик. if (map.get (w) .equals (w)) map.put (w, map.get (w) +1); // как это –
Я бы, вероятно, создал карту с количеством раз, когда символ присутствует в строке, а затем вычисляется на основе этого, т. е. в строке есть 2 a, 2 c и 2 r, а машине требуется только один каждого, так что вы можете построить его дважды. Это также должно привести к снижению сложности. – Thomas