每日leetcode-数组-389. 找不同
分类:字符串-字符的统计
题目描述:
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
解题思路:
分别统计两个字符串中各个字母的个数,然后找区别
对字母计数,找出计数不同的那个字母就是答案。代码实现的时候,可以对 s 进行字母计数,遍历 t 的时候,如果计数小于 00,那么表示这个字母在 t 中出现得更能多一些,返回这个字母就行了。
class Solution: def findTheDifference(self, s: str, t: str) -> str: a = Counter(s) b = Counter(t) return list(b-a)[0]
注:counter 要得到元素,用list转换成列表形式,再对list中的值进行取值。创建counter之后可以传入字符串、字典、元组等迭代器。删除时用del
时间复杂度:O(n)
空间复杂度:O(1) 只会用到常数个额外空间
解题思路2:首先遍历字符串 s,对其中的每个字符都将计数值加 1;然后遍历字符串 t,对其中的每个字符都将计数值减 1。当发现某个字符计数值为负数时,说明该字符在字符串 t 中出现的次数大于在字符串 s 中出现的次数,因此该字符为被添加的字符。
class Solution: def findTheDifference(self, s: str, t: str) -> str: # a = Counter(s) # b = Counter(t) # return list(b-a)[0] count = {} for i in s: if i not in count: count[i] = 1 else: count[i] +=1 for j in t: if j not in count: return j else: count[j] -= 1 if count[j] < 0: return j
时间复杂度:O(n) 需要遍历
空间复杂度:O(∣Σ∣),其中 Σ 是字符集,这道题中字符串只包含小写字母,∣Σ∣=26。需要使用数组对每个字符计数。