2022-02-28 「383. 赎金信」

不知道今天的简单题够判多少年:https://leetcode-cn.com/problems/ransom-note/

解题用到的大部分方法来自上一题的笔记,这里就不重复写了:https://www.jianshu.com/p/0396d6112b06

官方解题思路是,由于全部都是小写字母(emmm我审题不认真,没有看到),因此只要new一个长度为26的数组,来存每个字母的出现次数就好了,2次for循环。

我的思路是,把base字符串转成char[]后存入HashMap中,相同字符的value+1,再遍历另一个字符串转的char[],如果找不到直接返回false,能找到value就-1,循环全部走完还没有返回false,就返回true。


class Solution {

    public boolean canConstruct(String ransomNote, String magazine) {

        Map tmp = new HashMap(); 



        for (int i = 0 ; i < magazine.length();i++) {

            char ch = magazine.charAt(i);

            tmp.put(ch, tmp.getOrDefault(ch, 0) +1);

        }

        for (int j = 0; j < ransomNote.length(); j++) {

            char ch1 = ransomNote.charAt(j);

            if (tmp.getOrDefault(ch1, 0) == 0) {

                return false;

            }

            tmp.put(ch1, tmp.get(ch1)-1);

        }

        return true;

    }

}

你可能感兴趣的:(2022-02-28 「383. 赎金信」)