Фон
Это заявление о проблеме является частью карт изучения LeetCode под названием «Массивы и строки». Под подзаголовкой вывод.
Постановка задачи
Учитывая строку, вам необходимо изменить порядок символов в каждом слове в предложении, пока все еще сохраняющий пробел и начальный порядок слов.
Пример 1.
Input: "Let's take LeetCode contest" Output: "s'teL ekat edoCteeL tsetnoc"
Примечание: В строке каждое слово разделено одним пространством, и в строке не будет никакого дополнительного пространства.
Решение подход 1.
- Преобразуйте всю строку в список. Разделить строку на основе пробелов.
- Итерация по списку. Обратное каждое слово. Для обратного использования нарезки.
- Восстановить всю строку. На этот раз каждое слово будет изменено.
class Solution: def reverseWords(self, s: str) -> str: s = s.split() s1 = '' for x in range(0, len(s)): if x == len(s) - 1: s1 += s[x][::-1] else: s1 += s[x][::-1] + ' ' return s1
Вещи, чтобы заметить
- Мы уже используем для цикла для перечисления итерации Сложность времени – O (n).
- Мы обративнив строку с помощью нарезки.
- Дополнительное пространство используется здесь также. Как создается новая строка вместо того, чтобы внести изменения на месте.
Решение подход 2
Вероятно, это, вероятно, более длительный путь к достижению решения.
- Разделить строку в слова. Разделить использование пробелов.
- Итерация по списку. Преобразуйте каждое слово в буквы.
- Затем сделайте обратную связь на основе двухкакента. Однажды обратное сделано, чтобы присоединиться к этим буквам, чтобы снова формировать строку.
- Затем снова преобразуйте список измененных слов, чтобы сформировать выходную строку.
class Solution: def reverseWords(self, s: str) -> str: L = [] string = s.split() for word in string: y = list(word) start = 0 end = len(y) - 1 while start < end: temp = y[start] y[start] = y[end] y[end] = temp start += 1 end -= 1 new_string = ''.join(y) L.append(new_string) return ' '.join(L)
Вещи, чтобы заметить
- Мы используем дополнительное пространство. Как мы создаем новый список в процессе.
- Внутри петли есть цикл a пока для петли. Это добавляет к сложности времени.
- Эта вся обратная логика была написана, чтобы избежать использования списка .Reverse ().
Некоторые следующие вопросы
- Что такое временная сложность реверсирующей строки с использованием нарезки S [:: – 1]? (См. Решение 1)
- Как мы используем нарезку внутри петли. Будет ли общая сложность кода o (Nk)? (см. Решение 1)
- В раствор подход 2. Мы используем цикл While внутри петли для цикла. Это приведет к сложности времени O (NK) или O (N ^ 2)?
Оригинал: “https://dev.to/mridubhatnagar/day-16-reverse-words-in-a-string-iii-jn3”