首页 > 其他分享 >LeetCode刷题(50)~拼写单词【利用数组替换map/unordered_map 提高效率】

LeetCode刷题(50)~拼写单词【利用数组替换map/unordered_map 提高效率】

时间:2023-01-12 14:41:56浏览次数:39  
标签:map string int chars 50 char words 字符串 unordered

题目描述

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。

假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。

注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。

返回词汇表 words 中你掌握的所有单词的 长度之和。

示例 1:

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

示例 2:

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

提示:

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

解答 By 海轰

提交代码(暴力解法)

bool isword(string a,string b)
    {
        unordered_map<char,int> m;
        for(char c:b)
        ++m[c];
        for(char c:a)
        {
            if(m.find(c)==m.end()||m[c]<=0)  return false;
            else
            {
                --m[c];
            }
        }
        return true;
    }
    int countCharacters(vector<string>& words, string chars) {
       int len=words.size();
       int count=0;
       for(int i=0;i<len;++i)
       if(isword(words[i],chars)==true) count+=words[i].length();
       return count;
    }

运行结果
LeetCode刷题(50)~拼写单词【利用数组替换map/unordered_map 提高效率】_其他
提交代码(利用数组优化)

int countCharacters(vector<string>& words, string chars) {
       char a[26]={0};
       for(char c:chars)
       ++a[c-'a'];
       int result=0;
       for(string word:words)
       {
           char b[26]={0};
           for(char c:word)
           ++b[c-'a'];
           int i;
           for(i=0;i<26;++i)
           {
               if(a[i]<b[i]) 
               break;
           }
           if(i==26)
           result+=word.length();
           else
           result+=0;
       }
       return result;
    }

运行结果
LeetCode刷题(50)~拼写单词【利用数组替换map/unordered_map 提高效率】_提交代码_02

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters

标签:map,string,int,chars,50,char,words,字符串,unordered
From: https://blog.51cto.com/u_15939722/6004144

相关文章

  • AZ-500 Lab-using Microsoft Antimalware for Virtual Machines
    由于微软Azure平台界面一直都在变,所以通过考试的关键,是真正理解lab题要表达的意思,不要死记硬背。SIMULATIONYouneedtoperformafullmalwarescaneverySundayat02:0......
  • 腾讯云 EMR(Elastic Map Reduce) 数仓 实时 离线
    弹性MapReduce__弹性伸缩Hadoop服务_云原生开源大数据平台-腾讯云https://cloud.tencent.com/product/emr1.腾讯云EMR-实时数仓-课程介绍-腾讯云开发者社区-腾讯云h......
  • mmap详解
    p107内存映射,简而言之就是将内核空间的一段内存区域映射到用户空间。映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,相反,内核空间对这段区域的修改也直接反映......
  • Spark大数据之深度理解RDD的内在逻辑(5000字案例干货!)
    文章目录​​一、深入RDD​​​​1.案例​​​​1.1假设要针对整个网站的历史数据进行梳理,量有1T,如何处理?​​​​1.2如何放在集群中运行​​​​3.如何放在集群中的话,......
  • Java Map遍历方式的选择
    1.阐述对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的......
  • HTTP请求错误400、401、402、403、404、405、406、407、412、414、500、501、502解析
    HTTP错误400400请求出错由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。HTTP错误401401.1未授权:登录失败此错误表明传输给服务器......
  • Leaflet.js | Map类属性与方法
    1、初始化L.map(<String>id,options?)//用地图div的id创建L.map(<HTMLElement>el,options?)//用地图div的name创建//简单示例//initializethemaponthe......
  • 230111_50_SpringBoot入门
    整体视图SpringBoot简介​ SpringBoot基于Spring开发,SpirngBoot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Sprin......
  • ConcurrentHashMap
    保证线程安全的原因有线程安全隐患的变量使用volatile修饰,确保变量是从内存获取而不是变量的私有拷贝。  数据结构JDK1.8中的ConcurrentHashMap选择了与HashMap......
  • 微擎500错误
    define('DEVELOPMENT',$_W['config']['setting']['development']==1);if(DEVELOPMENT){ini_set('display_errors','1');error_reporting(E_ALL^E_NOTICE);error_r......