文章目录

  • 1. 题目
  • 2. 解题

1. 题目

外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。

字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底:

  • 单词 word 中包含谜面 puzzle第一个字母
  • 单词 word 中的每一个字母都可以在谜面 puzzle 中找到。
    例如,如果字谜的谜面是 "abcdefg",那么可以作为谜底的单词有 "faced", "cabbage", 和 "baggage";而 "beefed"(不含字母 "a")以及 "based"(其中的 "s" 没有出现在谜面中)。

返回一个答案数组 answer,数组中的每个元素 answer[i] 是在给出的单词列表 words 中可以作为字谜迷面 puzzles[i] 所对应的谜底的单词数目

示例:
输入:
words = ["aaaa","asas","able","ability","actt","actor","access"],
puzzles = ["aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"]
输出:[1,1,3,2,4,0]
解释:
1 个单词可以作为 "aboveyz" 的谜底 : "aaaa"
1 个单词可以作为 "abrodyz" 的谜底 : "aaaa"
3 个单词可以作为 "abslute" 的谜底 : "aaaa", "asas", "able"
2 个单词可以作为 "absoryz" 的谜底 : "aaaa", "asas"
4 个单词可以作为 "actresz" 的谜底 : "aaaa", "asas", "actt", "access"
没有单词可以作为 "gaswxyz" 的谜底,因为列表中的单词都不含字母 'g'。提示:
1 <= words.length <= 10^5
4 <= words[i].length <= 50
1 <= puzzles.length <= 10^4
puzzles[i].length == 7
words[i][j], puzzles[i][j] 都是小写英文字母。
每个 puzzles[i] 所包含的字符都不重复。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-valid-words-for-each-puzzle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 1723. 完成所有工作的最短时间(DFS+剪枝 / 状态压缩DP)
LeetCode 5756. 两个数组最小的异或值之和(状态压缩DP)
LeetCode 5869. 两个回文子序列长度的最大乘积(状态压缩+枚举状态子集+预处理)

class Solution {public:vector<int> findNumOfValidWords(vector<string>& words, vector<string>& puzzles) {// 处理 words 变成二进制位表示是否出现每种字符,转化成整数unordered_map<int, int> m;for(auto& w : words){int v = 0;for(auto c : w)v |= 1<<(c-'a');m[v]++;}// 遍历谜面vector<int> ans(puzzles.size());for(int i = 0; i < puzzles.size(); ++i){int bit = puzzles[i][0]-'a';//谜面的首字符位置int v = 0;for(auto c : puzzles[i])v |= 1<<(c-'a');// 枚举 v 的二进制状态子集for(int s = v; s>0; s = (s-1)&v){if((s&(1<<bit)) && m.count(s))//状态包含谜面首字符ans[i] += m[s];}}return ans;}
};

144 ms 28.7 MB C++

祝大家元宵节快乐!


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1178. 猜字谜(状态压缩+枚举二进制子集+哈希)相关推荐

  1. leetcode 1178.猜字谜

    leetcode 1178.猜字谜 题干 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧. 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么 ...

  2. 记录一下leetcode:1178猜字谜

    import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream;/*** leetcode ...

  3. leetcode 1178. 猜字谜(位运算)

    外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧. 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底: 单词 word 中包含 ...

  4. LeetCode 2002. 两个回文子序列长度的最大乘积(状态压缩+枚举状态子集+预处理)

    文章目录 1. 题目 2. 解题 2.1 超时 2.2 预处理优化 1. 题目 给你一个字符串 s ,请你找到 s 中两个 不相交回文子序列 ,使得它们长度的 乘积最大 . 两个子序列在原字符串中如果 ...

  5. 【力扣】1178. 猜字谜

    以下为力扣官方题解 1178. 猜字谜 题目 示例 提示 官方题解 前言 方法一 二进制状态压缩 思路与算法 细节 代码 复杂度分析 方法二:字典树 思路与算法 细节 代码 复杂度分析 题目 外国友人 ...

  6. POJ 1873 The Fortified Forest (凸包,状态压缩枚举)

    题目链接:http://poj.org/problem?id=1873 题意:给出一些树,每棵树有坐标,高度,以及价值,要求砍掉一些树,用那些木材,将其它树围起来,要求花最小的代价,代价相同,要求砍掉 ...

  7. LeetCode 5485. 找出最长的超赞子字符串 (状态压缩、二进制、位运算、前缀和)

    5485. 找出最长的超赞子字符串 题意: 给你一个字符串 s .请返回 s 中最长的 超赞子字符串 的长度. 「超赞子字符串」需满足满足下述两个条件: 该字符串是 s 的一个非空子字符串 进行任意次 ...

  8. c++ 输出二进制_【位运算与状态压缩】二进制的魅力

    [引言] 今天讲讲位运算与状态压缩.         位运算涉及系统底层的运算,骚操作很多:状态压缩则是编程中空间优化的有效手段,应该说两者本身其实并没有太直接的联系,但是在实际使用时会有一定的结合, ...

  9. AcWing 1960. 闪烁(状态压缩+枚举)

    题目链接 https://www.acwing.com/problem/content/1962/ 思路 这题如果用一个数组的话是会炸空间的,所以我们采用状态压缩,因为每个灯的状态只有0和1,那么我们 ...

最新文章

  1. 【反传销】春节一个短暂误入传销和脱身的真实故事以及对技术的思考
  2. Qt Creator查找和更换
  3. Syntax error: word unexpected (expecting ))错误的解决方法
  4. stcisp一直检测单片机_三种方法对比:STC51单片机实现免冷启动
  5. 人一生中最该看清的5个真相
  6. 我被面试官给虐懵了,竟然是因为我不懂Spring中的@Configuration
  7. C++ 类和对象成员特性
  8. Redis登陆服务器和批量删除指定的key
  9. 【星云测试】开发者测试(2)-采用精准测试工具对J2EE Guns开发框架进行测试
  10. ES | CentOS下基于ElasticSearch的head插件安装
  11. tolua unity 报错_Unity3D热更新之LuaFramework篇[01]--从零开始
  12. 摘要抽取算法——最大边界相关算法MMR(Maximal Marginal Relevance)
  13. Boost C++ 智能指针
  14. 对网站商城源码的研究分析 分享大量源码下载
  15. 网络安全笔记-DDoS攻击
  16. 深入Elasticsearch:索引的创建
  17. unicloud进阶uni-id入门(一)---uni-id能做什么?
  18. 基于 Java 的 I Don’t Wanna Be The Bugger 冒险游戏【100010211】
  19. 正版现货黄金怎么区分(上)
  20. 金融行业移动信息化解决方案

热门文章

  1. vb.net服务器启动后cpu占用了70_记一次服务器被异常程序占用的解决过程(怀疑黑客攻击)...
  2. 驱动级的自动按键_Aqara全自动智能推拉锁D100,体验全自动开门的便捷
  3. require.js用法简介
  4. php数值操作,php数值计算num类简单操作示例
  5. 【Java】HashMap源码(1.7)
  6. 驱动框架5——基于驱动框架写led驱动
  7. excel拼接数据宏
  8. AC日记——集合位置 洛谷 P1491
  9. canvas小程序-快跑程序员
  10. Java的几个同步辅助类