Рубрики
Без рубрики

День-16 Обратные слова в строке III.

Фон Это заявление о проблеме является частью извлеченных карт LeetCode с названием массивов и ул … Tagged Python, Challenge.

Фон

Это заявление о проблеме является частью карт изучения LeetCode под названием «Массивы и строки». Под подзаголовкой вывод.

Постановка задачи

Учитывая строку, вам необходимо изменить порядок символов в каждом слове в предложении, пока все еще сохраняющий пробел и начальный порядок слов.

Пример 1.
Input: "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"

Примечание: В строке каждое слово разделено одним пространством, и в строке не будет никакого дополнительного пространства.

Решение подход 1.
  1. Преобразуйте всю строку в список. Разделить строку на основе пробелов.
  2. Итерация по списку. Обратное каждое слово. Для обратного использования нарезки.
  3. Восстановить всю строку. На этот раз каждое слово будет изменено.
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    
Вещи, чтобы заметить
  1. Мы уже используем для цикла для перечисления итерации Сложность времени – O (n).
  2. Мы обративнив строку с помощью нарезки.
  3. Дополнительное пространство используется здесь также. Как создается новая строка вместо того, чтобы внести изменения на месте.
Решение подход 2

Вероятно, это, вероятно, более длительный путь к достижению решения.

  1. Разделить строку в слова. Разделить использование пробелов.
  2. Итерация по списку. Преобразуйте каждое слово в буквы.
  3. Затем сделайте обратную связь на основе двухкакента. Однажды обратное сделано, чтобы присоединиться к этим буквам, чтобы снова формировать строку.
  4. Затем снова преобразуйте список измененных слов, чтобы сформировать выходную строку.
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)
Вещи, чтобы заметить
  1. Мы используем дополнительное пространство. Как мы создаем новый список в процессе.
  2. Внутри петли есть цикл a пока для петли. Это добавляет к сложности времени.
  3. Эта вся обратная логика была написана, чтобы избежать использования списка .Reverse ().
Некоторые следующие вопросы
  1. Что такое временная сложность реверсирующей строки с использованием нарезки S [:: – 1]? (См. Решение 1)
  2. Как мы используем нарезку внутри петли. Будет ли общая сложность кода o (Nk)? (см. Решение 1)
  3. В раствор подход 2. Мы используем цикл While внутри петли для цикла. Это приведет к сложности времени O (NK) или O (N ^ 2)?

Оригинал: “https://dev.to/mridubhatnagar/day-16-reverse-words-in-a-string-iii-jn3”