力扣刷题:交替合并字符串(python3)

文章介绍了如何使用Python的deque数据结构以及内置函数zip_longest实现交替合并两个给定字符串的功能,示例展示了如何处理字符串长度不等的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

给你两个字符串 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

解答

代码

class Solution:
    def mergeAlternately(self, word1: str, word2: str) -> str:
        a, b = deque(word1), deque(word2)
        res = ""
        while a and b:
            res += a.popleft()
            res += b.popleft()
        res += "".join(a) + "".join(b)
        return res

class Solution:
    def mergeAlternately(self, word1: str, word2: str) -> str:
        return "".join(sum(zip_longest(word1, word2, fillvalue=""), ()))

作者:听听
链接:https://leetcode.cn/problems/merge-strings-alternately/
来源:力扣(LeetCode)

相关函数

zip_longest()

zip_longest 与 zip 函数唯一不同的是如果两个可迭代参数长度不同时,按最长的输出,长度不足的用 fillvalue 进行代替,默认为 None。

from itertools import zip_longest

a = [1,2,3,4]
b = [5,6,7]
print(list(zip_longest(a,b)))
# 输出:[(1, 5), (2, 6), (3, 7), (4, None)]

deque()

collections模块常用类型有:

双向队列(deque)
类似于list的容器,可以快速的在队列头部和尾部添加、删除元素
请点击deque

计数器(Counter)
dict的子类,计算可hash的对象
请点击Counter

默认字典(defaultdict)
dict的子类,可以调用提供默认值的函数
请点击defaultdict

有序字典(OrderedDict)
dict的子类,可以记住元素的添加顺序

可命名元组(namedtuple)
可以创建包含名称的tuple

deque是栈和队列的一种广义实现,deque是"double-end queue"的简称;deque支持线程安全、有效内存地以近似O(1)的性能在deque的两端插入和删除元素,尽管list也支持相似的操作,但是它主要在固定长度操作上的优化,从而在pop(0)和insert(0,v)(会改变数据的位置和大小)上有O(n)的时间复杂度

append()
从右端添加元素(与list同)
appendleft()
从左端添加元素
extend()
从右端逐个添加可迭代对象(与list同)
Python中的可迭代对象有:列表、元组、字典、字符串

from collections import deque
ex = (1, "h", 3)
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.extend(ex)
dlist1.extend(ex)
print(dst)
print(dlist1)
#结果:
#deque(['a', 'b', 'c', 'd', 1, 'h', 3])
#deque([0, 1, 2, 3, 1, 'h', 3])

extendleft()
从左端逐个添加可迭代对象
Python中的可迭代对象有:列表、元组、字典、字符串
pop()
移除列表中的一个元素(默认最右端的一个元素),并且返回该元素的值(与list同),如果没有元素,将会报出IndexError
popleft()
移除列表中的一个元素(默认最左端的一个元素),并且返回该元素的值,如果没有元素,将会报出IndexError
count()
统计队列中的元素个数(与list同)
insert(index,obj)
在指定位置插入元素(与list同)

from collections import deque

st = "abbcd"
dst = deque(st)
dst.rotate(1)
print(dst)
#结果:
#deque(['d', 'a', 'b', 'b', 'c'])

clear()
将deque中的元素全部删除,最后长度为0
remove()
移除第一次出现的元素,如果没有找到,报出ValueError
maxlen
只读的属性,deque限定的最大长度,如果无,就返回None。
当限制长度的deque增加超过限制数的项时, 另一边的项会自动删除。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值