【刷题笔记】389. 找不同

272 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

一、题目描述:

389. 找不同 - 力扣(LeetCode)

给定两个字符串 st ,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例 1:

输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。

示例 2:

输入:s = "", t = "y"
输出:"y"

提示:

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • s 和 t 只包含小写字母

二、思路分析:

使用一个集合来存储s中的元素以及他们对应出现的次数,将s中的每个元素出现次数都为存为1 如果出现两次,则次数加一,遍历t中的字符 判断t中的字符是否在s中出现,如果出现,将其次数减一, 然后遍历下一个元素,当找到不存在或者出现次数已经为零的元素便是多于的字符

三、AC 代码:

public char findTheDifference(String s, String t) {
    //使用一个Map集合来存储所有元素及其出现的次数
    Map<Character,Integer> chars = new HashMap<>();
    char[] ss = s.toCharArray();
    //循环字符串s,将所有的字符存到map中
    for(char sc : ss){
        //如果同一个元素出现第二次  则让其出现次数加一
        if(chars.containsKey(sc)){
            int newCount = chars.get(sc) + 1;
            chars.put(sc,newCount);
            //并跳过这次循环  否则会出现再次添加为1的情况
            continue;
        }
        //将字符及其出现次数存入到集合中
        chars.put(sc,1);
    }
    //遍历字符串t  用字符串t中的字符去map集合中找到对应的元素 并将其出现次数-1
    char[] ts = t.toCharArray();
    for(char tc : ts){
        //情况一:字符没有在集合中出现  则直接返回
        if(!chars.containsKey(tc)){
            return tc;
        }
        //情况二:字符的出现次数已经为0  证明多于了
        if(chars.get(tc) == 0){
            return tc;
        }
        //如果不是前两种情况 就是合理的元素  让他们的出现次数减1
        int newCount = chars.get(tc) - 1;
        chars.put(tc,newCount);
    }
    //如果没有多于的元素
    return '-';
}

范文参考:、

力扣389 找不同 - 找不同 - 力扣(LeetCode)