题目
难度:★☆☆☆☆
类型:字符串
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例
输入:
s = "abcd"
t = "abcde"
输出:
e
解释:
'e' 是那个被添加的字母。
解答
方案1:排序
将字符串转为列表,再将两个列表排序,同时遍历并逐一比较两个元素,t中随机插入的元素会导致中途遇到不同元素,而s中字符不同的t中的元素即为被插入到t中的元素。
class Solution(object):
def findTheDifference(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
sl, tl = list(s), list(t) # 输入字符串列表化
sl.sort() # 将两个列表排序
tl.sort()
for c_s, c_t in zip(sl, tl): # 遍历两个列表
if c_s != c_t: # 遇到不同元素
return c_t # 返回不同元素
return tl[-1] # 返回最后一个
方案2:异或
我们将两个字符串合并成一个大列表,这样被插入的字符就只出现了一次,我们将列表中的每一个字符转变成为其对应的ascii码,使用【题目136. 只出现一次的数字】中的方法求出这个只出现过一次的数字,并转回到字符即可。
class Solution(object):
def findTheDifference(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
char_list = list(s) + list(t) # 输入字符串列表化并合并
num_list = map(ord, char_list) # 将合并后的列表中的每一个字符转换为对应的ascii码
res = 0 # 最终结果
for n in num_list:
res ^= n
return chr(res) # 将ascii转回字符
方案3:替换
class Solution:
def findTheDifference(self, s, t):
for c in s:
if c in t:
t = t.replace(c, '', 1)
return t
如有疑问或建议,欢迎评论区留言~