【LeetCode】(Python):1768. 交替合并字符串
给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串 。
示例 1:
输入:word1 = "abc", word2 = "pqr"
输出:"apbqcr"
解释:字符串合并情况如下所示:
word1: a b c
word2: p q r
合并后: a p b q c r
示例 2:
输入:word1 = "ab", word2 = "pqrs"
输出:"apbqrs"
解释:注意,word2 比 word1 长,"rs" 需要追加到合并后字符串的末尾。
word1: a b
word2: p q r s
合并后: a p b q r s
示例 3:
输入:word1 = "abcd", word2 = "pq"
输出:"apbqcd"
解释:注意,word1 比 word2 长,"cd" 需要追加到合并后字符串的末尾。
word1: a b c d
word2: p q
合并后: a p b q c d
提示:
1 <= word1.length, word2.length <= 100
word1 和 word2 由小写英文字母组成
遇到报错问题:
TypeError: Solution.mergeAlternately() takes 2 positional arguments but 3 were given
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ret = Solution().mergeAlternately(param_1, param_2)
Line 36 in _driver (Solution.py)
_driver()
Line 47 in <module> (Solution.py)
解决:
class Solution:
def mergeAlternately(self, param1, param2):
# 方法体
pass
class Solution:
def mergeAlternately(self, word1, word2):
str = ""
min_lengths = min(len(word1), len(word2))
for i in range(min_lengths):
str += word1[i] + word2[i]
str += word1[min_lengths:] + word2[min_lengths:]
return str
这段代码定义了一个名为 Solution
的类,其中包含了一个名为 mergeAlternately
的方法。这个方法接受三个参数:self(表示实例对象本身)、word1 和 word2。方法的目的是将两个字符串按照交替的方式合并。
接下来,代码创建了一个空字符串 str 用于存储合并后的结果。然后,通过 min
函数找到 word1 和 word2 中长度较短的那个字符串的长度,并将其赋值给变量 min_lengths
。
接着,使用一个 for 循环,从0遍历到 min_lengths-1,依次取出 word1 和 word2 中对应位置的字符,并将它们拼接到 str 字符串中。
最后,将 word1 和 word2 中剩余的部分(即长度超过 min_lengths 的部分)拼接到 str 字符串的末尾。最终,方法返回拼接后的字符串 str。
这段代码的作用是将两个字符串按照交替的方式合并,结果字符串中包含了 word1 和 word2 中所有的字符。
优化一:
class Solution:
def mergeAlternately(self, word1, word2):
min_length = min(len(word1), len(word2))
merged = ''.join(word1[i] + word2[i] for i in range(min_length))
return merged + word1[min_length:] + word2[min_length:]
在这个优化后的版本中,我们使用了列表推导式和字符串的 join()
方法来创建合并后的字符串。通过 join()
方法,我们将列表中的字符连接成一个字符串。这样做可以减少内存开销,并提高代码的可读性。
另外,我们在一行中完成了合并过程,不再需要显式地初始化空字符串 str,而是直接使用 merged 变量来存储合并后的结果。
优化二:
class Solution:
def mergeAlternately(self, word1, word2):
# 使用列表推导式,将两个字符串的字符交替放入列表中
merged = [char1 + char2 for char1, char2 in zip(word1, word2)]
# 将剩余的字符添加到列表中
merged.extend(word1[len(word2):])
merged.extend(word2[len(word1):])
# 将列表中的字符连接成一个字符串并返回
return ''.join(merged)
在这个优化后的代码中,首先使用了 zip
函数来将 word1 和 word2 中的字符一一配对,并使用列表推导式将配对的字符交替放入一个列表 merged 中。然后,将剩余的字符添加到 merged
列表中。最后,使用 join
方法将列表中的字符连接成一个字符串,并返回这个字符串。
这种优化方式使得代码更加简洁和易读,同时也提高了代码的效率。