Количество букв

  • 12
  • Недоступна
Вам никогда не казалось, что букв в алфавите — слишком много? Компьютеры вполне обходятся двумя, а у нас их целых 33. Непозволительная избыточность! Тем не менее, приходится мириться с реальностью и решать соответствующие задачи. Вот одна из них: введите с клавиатуры 10 строчек и подсчитайте в них количество различных букв.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (565)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
макс лапушкин
Уровень 10, Куровское, Россия
43 минуты назад
решил через charAt() потом сверил с решением javaRush оказалось что мой вариант даже короче
Zhanir Ex
Уровень 12, Алматы
29 августа, 19:55
Нашёл тоже интересное решение с использованием HashMap:
char[] charArray = list.toString().toCharArray();

        HashMap<Character, Integer> charint = new HashMap<>();

        for (Character c : charArray){
            if (charint.containsKey(c)) charint.replace(c, charint.get(c) + 1);
            else charint.put(c, 1);
        }

        for (Character character : alphabet) {
            System.out.println(character + " " + (charint.get(character) == null ? "0" : charint.get(character)));
        }
Руслан
Уровень 12, Москва
12 сентября, 09:06
Кроме того, что создается необязательная для решения задачи структура, осуществляются такие же необязательные операции перестановки.
Naryuk
Уровень 11, Казахстан
25 августа, 13:44
Блин, не понял чем не верно моё решение. В итоге просто попытался понять правильное решение, и в процессе проверял его через валидатор. Но когда уже засчитали задачу кажется понял в чём ошибка :( "Учти, что вводимые с клавиатуры строки могут содержать не только буквы, но и другие символы."
Андрей
Уровень 15, Москва
11 августа, 13:19
Интересная задача! Легко решается через метод toCharArray()
Komarov Anton
Уровень 12, Самара
27 июля, 18:57
Если выводится не по алфавиту, то обратите внимание на то, чем отличаются HashMap, LinkedHashMap и TreeMap. 10 минут на решение задачи и 3 часа на понимание ПОЧЕМУ СОБАЧИЙ ТЫ СЫН ВЫВОДИШЬ НЕ С ТОЙ БУКВЫ !?
Тимур Акматов
Уровень 18, Бишкек, Кыргызстан
22 июня, 17:10
к сожалению еще не знаком с методами которые предлагаются в комментариях, но задачка оказалась по сути простой. Нужен только один метод charArt() и три вложенные циклы. Всё это занимает семь строчек!!!
Marat Minnigaliev
Уровень 16
19 июня, 00:36
как вариант можно конкатенировать в цикле считанные строки list в одну переменную String и посчитать количество букв любым доступным для вас методом
Нурислам
Уровень 18
27 мая, 12:51
Чтож, долго думал как решить эту задачу, но не сдавался и решил сам. Пожалуй хотелось бы оставить свой комментарий по решению данной задачи. Многие в комментах тут пишут про Collections.frequency(), да, это мне кажется гораздо лаконичнее и красивее чем писать циклы. По сути решение занимает один цикл foreach (пробегаемся по списку (алфавит) и выводим на экран каждый элемент списка (алфавит) + результат работы Collections.frequency(), в параметрах которого указываем наш список list (который принимает введенные строки) и список (алфавит). Но беда в том, что при такой реализации это работать не будет), я так понял из-за того, что у нас список введенных строк типа String, а список (алфавит) типа символов (Character), может кто-то поправит и укажет действительную причину почему это не работает. В общем, чтобы решить данную проблему, решил перевести список введенных строк list типа String в список символов (Character). Объявил новый список List<Character> list1 = new ArrayList<>(). Далее объявил строку назовем sub и для данной строки выполнил преобразование изначального списка list в строку (list.toString() ). Таким образом мы получим наш список в виде строки, но беда в том, что теперь нам необходимо удалить квадратные скобки в который обрамляется список, запятые между элементами списка и пробелы. После перевода в строку, для удаления [ ] , использовал метод substring(1, размер нашей строки -1). Далее для удаления запятых метод replaceAll(",", ""). И затем еще раз метод replaceAll(" ", "") - для удаления пробелов. В итоге получаем чистую строку - без [ ], без запятых, без пробелом между элементами, то что нам было нужно. И затем пускаем цикл от 0 до длины строки, в котором получаем каждый символ строки с помощью метода charAt(i) и добавляем данный символ в объявленный нами ранее список символов list1. Теперь можно смело воспользоваться Collections.frequency(), он отработает на ура. Это мой первый коммент здесь, надеюсь кому-то поможет. Всем удачи ребят, не сд
Лизунов Сергей
Уровень 41, Пенза, Россия
26 мая, 12:41
На удивление, решил быстро, со второй попытки из-за невнимательности. Не надо ничего сортировать, у нас уже есть отсортированный список alphabet. Список со считанными строками преобразовал в строку и вырезал скобки, пробелы запятые (toString + replaceAll). Дальше цикл по списку alphabet (преобразовывая char в string) и использование StringUtils.countMatches (только поищите, как его правильно импортировать). Берем букву, считаем количество вхождений, печатаем. Все. 9 строк (две на красивости с фигурными скобками в цикле) + 1 строка импорта. P.S. Надеюсь, мой комментарий не сочтут за явную подсказку. P.P.S. До этого полгода учил Python (да простят меня здесь :-)), очень помогает сейчас при работе со строками, списками, циклами и т.д.
Anonymous #2436575 Android Developer в AllPets
22 мая, 18:36
Стоит вспомнить про Collections.frequency(), который уже реализовывает подсчет того, сколько раз элемент встречается в коллекции.