0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 39

Удалить из строки повторы и вернуть наименьшую строку в лексикографическом порядке

26.09.2023, 14:04. Показов 789. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решаю задачи на leetcode и попалась такая задача. Пример "cbacdcbc" -> "acdb". Написал так, проходит 270/290 тестов и потом превышение по памяти. Видимо надо оптимизировать, но не очевидно как.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from itertools import combinations
def remove(s):
    def sum_str(t):
        x = ''
        for i in t:
            x += i
        return x
    y = []
    x = list(combinations(s, len(set(s))))
    for i in x:
        if len(set(i)) == len(set(s)):
            y.append(i)
    return sum_str(min(y))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2023, 14:04
Ответы с готовыми решениями:

Отсортировать введенную строку в лексикографическом порядке
Есть вот такой вот рабочий код: #include <stdio.h> #include <string.h> #define MAX 30000 char text; int position, number; ...

Отсортировать строки в лексикографическом порядке по возрастанию, проверить наличие введенной строки в списке
Здравствуйте! Нужна помощь с выполнением следующего задания. Заранее спасибо. Создать список строк и заполнить его случайными строками...

Переставить строки матрицы так, чтобы строки стали расположены по убыванию в лексикографическом порядке
Дана матрица А из целых чисел размером NxM. Переставить строки матрицы так, чтобы строки стали расположены по убыванию в лексикографическом...

8
Любознательный
 Аватар для YuS_2
7406 / 2260 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
26.09.2023, 14:37
Цитата Сообщение от Daos711 Посмотреть сообщение
Удалить из строки повторы и вернуть наименьшую строку в лексикографическом порядке
Python
1
2
a ="cbacdcbc"
print(''.join(sorted(set(a))))
0
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 39
26.09.2023, 15:07  [ТС]
Прочитайте внимательнее что должно быть на выходе
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
26.09.2023, 15:14
тут можно использовать Set, а можно и Counter.
0
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 39
26.09.2023, 16:19  [ТС]
Боюсь эти методы не позволяют учитывать именно лексикографический порядок
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
26.09.2023, 17:17
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from collections import Counter
 
 
def remove1(s):
    if len(s) < 2:
        return s
    d = Counter(s)
    j = 0
    for i in range(len(s)):
        if s[i] < s[j]:
            j = i
        if d[s[i]] == 1:
            break
        d[s[i]] -= 1
    return s[j] + remove1(s[j + 1:].replace(s[j], ''))
 
 
def remove2(s):
    d = sorted(set(s))
    for ch in d:
        i = s.index(s)
        if len(set(s[i:])) == len(d):
            return ch + remove2(s[i:].replace(ch, ''))
    return ''
 
 
print(remove1("cbacdcbc"))
print(remove2("cbacdcbc"))
Добавлено через 6 минут
тут еще со стеком можно поиграться.
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
26.09.2023, 17:34
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
    public String removeDuplicateLetters(String s) {
        final Deque<Character> stack = new ArrayDeque<>();
        final Set<Character> used = new HashSet<>();
        final Map<Character, Integer> lastIndexes = new HashMap<>();
        for (var i = 0; i < s.length(); i++) {
            lastIndexes.put(s.charAt(i), i);
        }
        for (var i = 0; i < s.length(); i++) {
            final var c = s.charAt(i);
            if (used.contains(c)) {
                continue;
            }
            while (!stack.isEmpty() && c < stack.peek() && i < lastIndexes.get(stack.peek())) {
                used.remove(stack.pop());
            }
            stack.push(c);
            used.add(c);
        }
        final var sb = new StringBuilder();
        while (!stack.isEmpty()) {
            sb.append(stack.pop());
        }
        sb.reverse();
        return sb.toString();
    }
}

Не по теме:

В шоке от таких Medium задач: пишем Medium - Hard в уме.



Добавлено через 6 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
    def removeDuplicateLetters(self, s: str) -> str:
        stack = []
        used = set()
        lastIndexes = dict((c, i) for i, c in enumerate(s))
        for i, c in enumerate(s):
            if c in used:
                continue
            while stack and c < stack[-1] and i < lastIndexes[stack[-1]]:
                used.remove(stack.pop())
            stack.append(c)
            used.add(c)
        return "".join(stack)
2
Любознательный
 Аватар для YuS_2
7406 / 2260 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
27.09.2023, 07:29
Цитата Сообщение от Daos711 Посмотреть сообщение
Прочитайте внимательнее
А, пардон, читал по диагонали... но задание не слишком ясно написано, вчитываться, действительно, надо внимательно...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
27.09.2023, 08:05
Цитата Сообщение от Daos711 Посмотреть сообщение
Видимо надо оптимизировать, но не очевидно как
Цитата Сообщение от Daos711 Посмотреть сообщение
x = list(combinations(s, len(set(s))))
- тут память будет просто "жраться" (если различных символов много)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2023, 08:05
Помогаю со студенческими работами здесь

Упорядочить строки в лексикографическом порядке
нужно упорядочить строки в лексикографическом порядке. вот код, но он не выводит на экран помогите найти ошибки, пожалуйста #include...

Отсортировать строки в лексикографическом порядке
разработать 2 подпрограммы,одна из которых сравнивает две строки по лексикографическому порядку,а другая обменивает значения двух...

Файлы. Строки. Перестановка в лексикографическом порядке.
Оформить в модуле подпрограммы перестановки в середине рядка всех символов в лексикографичном порядке,уничтожение в рядке всех...

Следующая анаграмма строки в лексикографическом порядке
Условие Для данного слова (последовательности строчных латинских букв) выведите следующее за ним (в лексикографическом порядке) слово,...

Выведите все строки длины N в лексикографическом порядке
Доброго времени суток. Помогите пожалуйста решить По данным числам N и K выведите все строки длины N из символов 0..K-1 в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru