[力扣]编程基础 0 到 1

文章目录

  • 编程基础 0 到 1
    • 思路
    • 解题方法
    • 进行优化

编程基础 0 到 1

【LeetCode】(Python):1768. 交替合并字符串

思路

给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。

  1. 先识别字符串长度
  2. 依次取字符串长度的数,最后的加入。

返回 合并后的字符串
示例 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 方法将列表中的字符连接成一个字符串,并返回这个字符串。

这种优化方式使得代码更加简洁和易读,同时也提高了代码的效率。

你可能感兴趣的:(基础知识,python,编程语言,leetcode,python)