zoukankan      html  css  js  c++  java
  • 每日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。需要使用数组对每个字符计数。

  • 相关阅读:
    使用ServiceStackRedis链接Redis简介
    浅谈SQL SERVER中事务的ACID
    Sql Server查询性能优化之走出索引的误区
    Redis命令总结
    TSQL查询进阶—理解SQL Server中的锁
    SQL Server 2005 分区表实践——分区切换
    SQL Server Profiler 模板
    深入浅出SQL Server中的死锁
    不同的单元中的类可以共用同一个命名空间
    从硬盘上装xp手记(2005.8.14 )
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14930845.html
Copyright © 2011-2022 走看看