如何实现从右到左交错两个字符串的Python函数?
修正交错字符串函数的实现
你的代码存在几个关键问题,导致无法正确返回预期的交错字符串:
- 函数内部直接用
print输出片段,没有收集结果并返回字符串,反而返回了print函数对象,完全不符合函数的返回要求。 - 仅处理了两个字符串长度相同的情况,若输入字符串长度不同,会触发索引越界错误。
修正后的代码(匹配你的反转思路)
def interleave(s1: str, s2: str) -> str: rev_s1 = s1[::-1] rev_s2 = s2[::-1] result = [] # 处理不同长度的字符串,取两者的最大长度遍历 max_length = max(len(rev_s1), len(rev_s2)) for i in range(max_length): # 先加入反转后s2的字符(如果存在) if i < len(rev_s2): result.append(rev_s2[i]) # 再加入反转后s1的字符(如果存在) if i < len(rev_s1): result.append(rev_s1[i]) # 将列表拼接为最终字符串返回 return ''.join(result) # 测试示例 print(interleave("1234", "5678")) # 输出: 84736251
另一种可能的需求实现(若交错逻辑为s2原顺序 + s1从右到左)
如果题目要求的是保持s2的原顺序,同时从s1的右侧开始取字符交错(比如输入"1234"和"5678"时返回"54637281"),只需要调整反转的对象:
def interleave(s1: str, s2: str) -> str: rev_s1 = s1[::-1] result = [] max_length = max(len(rev_s1), len(s2)) for i in range(max_length): if i < len(s2): result.append(s2[i]) if i < len(rev_s1): result.append(rev_s1[i]) return ''.join(result) print(interleave("1234", "5678")) # 输出: 54637281
内容的提问来源于stack exchange,提问作者Underleague
相关产品推荐
相关产品推荐

