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