import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param requirements string字符串 
     * @param allocations string字符串 
     * @return string字符串
     */
    public String can_construct (String requirements, String allocations) {
        // write code here
int[] count = new int[26]; // 使用长度为26的数组来统计每个字母出现的次数

        // 对allocations进行遍历,统计每个字母的出现次数
        for (char c : allocations.toCharArray()) {
            count[c - 'A']++;
        }

        // 对requirements进行遍历,逐一减少对应字母的出现次数
        for (char c : requirements.toCharArray()) {
            count[c - 'A']--;
        }

        // 遍历统计数组,如果出现某个字母的出现次数小于0,则说明无法满足需求
        for (int i : count) {
            if (i < 0) {
                return "NO";
            }
        }

        return "YES";
    }
}

主要考察的是使用计数器统计字符出现次数和判断是否满足需求的能力。

通过统计allocations字符串中每个字符的出现次数,然后逐一减少requirements字符串中对应字符的出现次数。

检查统计数组是否存在小于0的值,以判断是否满足需求。

这道题挺简单的,我写代码的时候加上注解了,只看代码就能知道意思。

使用一个长度为26的整型数组来统计每个字母出现的次数,而不是使用哈希表(当然,咱也可以用哈希表,我只是看到题就觉得用数组比较好)。遍历allocations字符串,增加对应字母的出现次数;遍历requirements字符串,减少对应字母的出现次数。最后,遍历统计数组,如果出现任何负值,说明无法满足需求,返回"NO";否则,返回"YES"。这种实现方式具有良好的时间复杂度,并且代码量较少。