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

  • 相关阅读:
    bzoj2763 [JLOI]飞行路线 分层图最短路
    [模板]分块/可修改莫队 (数颜色种类)
    gcd步数
    洛谷2378 因式分解 字符串
    bzoj1090 字符串折叠
    洛谷1034 NOIP2002 矩形覆盖
    Codeforces#441 Div.2 四*题
    SPFA的小优化
    洛谷1073 NOIP2009 最优贸易
    bzoj2100 [Usaco2010 DEC]Apple Delivery苹果贸易
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14930845.html
Copyright © 2011-2022 走看看