欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 编程基础 0 到 1 1768. 交替合并字符串

编程基础 0 到 1 1768. 交替合并字符串

2025/4/3 13:59:08 来源:https://blog.csdn.net/m0_74153997/article/details/145305386  浏览:    关键词:编程基础 0 到 1 1768. 交替合并字符串

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

返回 合并后的字符串 。

class Solution(object):def mergeAlternately(self, word1, word2):i=0j=0str=[]while i< len(word1) and j<len(word2):str.append(word1[i])str.append(word2[j])i+=1j+=1while i< len(word1) :str.append(word1[i])i+=1while  j<len(word2):str.append(word2[j])j+=1return ''.join(str)

要从 word1 和 word2 开始,通过交替添加字母来合并字符串,并将多余的字母追加到合并后的字符串末尾,可以使用两个指针来遍历这两个字符串

上述while循环似乎有些繁琐,我们也可以使用for循环:

class Solution(object):def mergeAlternately(self, word1, word2):i=0str=[]maxlen=max(len(word1),len(word2))for i in range(maxlen):if i < len(word1):str.append(word1[i])if i < len(word2):str.append(word2[i])return ''.join(str)

使用效果是一样的。接下来说一下我写代码中遇到的一些问题:

1.尝试同时声明多个变量时使用了不正确的语法

刚开始我的i,j声明时使用的是i=0,j=0,但是报错了。我以为是没有声明类型,所以报错,但是加了int也不行,后来发现是在 Python 中,不能像在 C 或 Java 等语言中那样,在同一行中用逗号分隔来同时声明多个变量类型。每个变量应该单独声明,并且 Python 是动态类型语言,通常不需要在声明时指定变量类型。改成i,j=0,0也可以成功运行

2.连接字符串输出

在Python中,join()方法是字符串对象的一个方法,它用于将序列(如列表、元组等)中的元素连接成一个新的字符串。join()方法是处理字符串列表或字符串集合时非常有用的工具,特别是当你需要将它们合并成一个单一的、格式化的字符串时。它通常比使用循环和字符串连接运算符(+)来逐个连接字符串更高效,因为join()方法是在内部优化的,可以一次性完成所有的连接操作。

如果使用+:

执行用时一下就上升了很多。 

389.找不同

我先开始想直接把他们相减,但是没成功,说字符串减不了,于是改成了集合。但是用集合只能适用于加的字符和之前字符都不相同的情况

也可以用异或 

class Solution(object):def findTheDifference(self, s, t):result = 0for char in s:result ^= ord(char)for char in t:result ^= ord(char)return chr(result)

 

 刚开始我想只要在s中的字符,就剔除,但是存在字符重复的情况,可能造成返回值为null的情况:

后来我加入了计数器,希望跳过重复出现的情况,但是也出现了问题:

我想是因为打乱顺序,且a1 是基于 t 创建的集合,而 t 包含重复字符时,集合会丢失重复信息,这可能导致逻辑错误。而且for j in a1: return j 的逻辑不正确,因为 a1 在循环中被修改,可能导致无法正确返回结果。

这里我们还可以使用ASCLL码来进行运算,我认为这种想法很巧妙,且相当简洁:

class Solution(object):def findTheDifference(self, s, t):# 利用字符的 ASCII 值求和,t 的总和减去 s 的总和即为多出的字符return chr(sum(ord(c) for c in t) - sum(ord(c) for c in s))

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词