每日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。需要使用数组对每个字符计数。

原文地址:https://www.cnblogs.com/LLLLgR/p/14930845.html