Добавить в корзинуПозвонить
Найти в Дзене
Недалёкий разбор

Алгоритмы 1768. Merge Strings Alternately

Дано: две строки word1 и word2. Объединить эти строки, добавляя буквы в порядке их чередования, начиная с word1. Если одна строка длиннее другой, то дополнительные буквы должны быть добавлены в конец объединенной строки.
Вернуть сформированную объединенную строку. Метод указателей.
Чтобы объединить заданные слова, мы можем использовать один указатель.
Пусть i - это указатель, который мы будем использовать. Мы начинаем с i = 0 и продвигаемся к размеру более длинного слова между словами word1 и word2, то есть до i = max(word1.length(), word2.length()).
По мере продвижения к размеру более длинного слова мы каждый раз проверяем, указывает ли i на индекс, который находится в границах слов, или нет. Если i < word1.length(), мы добавляем word1[i] к результатам. Аналогично, если i < word2.length(), мы добавляем word2[i] в результаты.
Однако если i превышает длину какого-либо слова, у нас нет букв для добавления из этого слова, поэтому мы игнорируем его и продолжаем добавлять буквы из более

Дано: две строки word1 и word2. Объединить эти строки, добавляя буквы в порядке их чередования, начиная с word1. Если одна строка длиннее другой, то дополнительные буквы должны быть добавлены в конец объединенной строки.

Вернуть сформированную объединенную строку.

Метод указателей.
Чтобы объединить заданные слова, мы можем использовать один указатель.
Пусть i - это указатель, который мы будем использовать. Мы начинаем с i = 0 и продвигаемся к размеру более длинного слова между словами word1 и word2, то есть до i = max(word1.length(), word2.length()).
По мере продвижения к размеру более длинного слова мы каждый раз проверяем, указывает ли i на индекс, который находится в границах слов, или нет. Если i < word1.length(), мы добавляем word1[i] к результатам. Аналогично, если i < word2.length(), мы добавляем word2[i] в результаты.
Однако если i превышает длину какого-либо слова, у нас нет букв для добавления из этого слова, поэтому мы игнорируем его и продолжаем добавлять буквы из более длинного слова.

Решение 1:
def mergeAlternately(self, word1: str, word2: str) -> str:
m = len(word1)
n = len(word2)
result = []
for i in range(max(m,n)):
if i < m:
result += word1[i]
if i < n:
result += word2[i]
return ''.join(result)


Решение 2:
def mergeAlternately(self, word1: str, word2: str) -> str:
m = len(word1)
n = len(word2)
i = 0
j = 0
result = []
while i < m or j < n:
if i < m:
result += word1[i]
i += 1
if j < n:
result += word2[j]
j += 1

return ''.join(result)

Временная сложность: O(m+n)
Мы выполняем итерации над словами word1 и word2, по одному разу выталкивая их буквы в результат. Это займет O(m+n) времени.


Пространственная сложность: O(1)
Без учета пространства, занимаемого входными строками (word1 и word2) и выходной строкой (result), мы используем не более константы памяти.