Нумерация одинаковых строк без изменения их порядка в массиве

Рейтинг: 0Ответов: 1Опубликовано: 14.06.2023

Массив строк std::string str[] = {"строка", "01строка", "09строка", "04строка", "03строка", "01строка", "09строка", "05строка", "03строка", "строка", "01строка", "06строка", "03строка", "06строка", "09строка", "строка", "01строка", "05строка", "строка", "04строка", "строка", "09строка"};Мне нужно пронумеровать одинаковые строки - в конец строки прибавить ее номер в формате "_00n" (например, строка_001, строка_002, 01строка_001, 01строка_002 и т.д.). При этом пронумерованная строка должна быть записана в другой массив на то же место, что и в исходном массиве (т.е. строка_001 на 1 место, строка_002 на 10 место и т.д.). Мне не удалось придумать алгоритм решения этой задачи. Подскажите, пожалуйста, алгоритм решения этой задачи средствами C++.

Ответы

▲ 1

Раз еще и в такой же массив...

Берете очередной элемент, смотрите — пуст ли элемент во втором массиве. Если нет — элемент уже обработан, переходите к следующему. Если да — проходите весь первый массив в поисках такого же, добавляя элементы во второй массив в соответствующие места с соответствующими окончаниями.

O(n^2), если сортировать — быстрее (O(n log n)), но тогда надо держать еще массив (O(n)) с исходными позициями, раз они так важны...