• 拼写单词[哈希表]----leetcode周赛150_1001


    题目描述:

    给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars
    假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
    注意:每次拼写时,chars 中的每个字母都只能用一次。
    返回词汇表 words 中你掌握的所有单词的 长度之和。

    示例 1:

    输入:words = ["cat","bt","hat","tree"], chars = "atach"strong text
    输出:6
    解释:
    可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。

    示例 2:

    输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"
    输出:10
    解释:
    可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。

    提示

    1. 1 <= words.length <= 1000
    2. 1 <= words[i].length, chars.length <= 100
    3. 所有字符串中都仅包含小写英文字母

    思路:

    • chars以键值对方式存入哈希表,键为字母,值为字母在chars中出现的次数;

    • 对于words中每一个字符串,判断其字母出现次数,分如下两种情况:

      1. 如果大于哈希表中的次数,则表示字典中已经没有可用字符,此时应跳出循环;
      2. 否则表示字典中尚存在可用字符,继续执行,如果整个字符串遍历完成,则将字符长度累计到ans中;
    • 循环结束后返回ans,即可通过;

    具体代码如下 :

    class Solution {
    public:
        int countCharacters(vector<string>& words, string chars) {
            unordered_map<char,int> hash,temp;int N;int ok;int ans = 0;
            for(char c:chars)hash[c]++;
            
            for(string str:words){
                temp = hash;
                ok = 1;
                for(char c : str){
                    temp[c]--;
                    if(temp[c] < 0){
                        ok = 0;break;
                    }
                }
                if(ok)ans += str.size();
            }
            return ans;        
        }
    };
    
  • 相关阅读:
    Docker入门(windows版),利用Docker创建一个Hello World的web项目
    SpringBoot集成JWT实现token验证
    Jedis的基本操作
    Java动态代理详解
    SpringBoot利用自定义注解实现通用的JWT校验方案
    递归——汉诺塔问题(python实现)
    Datatable删除行的Delete和Remove方法的区别
    C# DEV使用心得
    总结
    安装插件时
  • 原文地址:https://www.cnblogs.com/zhangxiaomao/p/11372076.html
Copyright © 2020-2023  润新知