给定两个单词构成的数组,一个谜面一个谜底 要求谜面包含谜底的首字母,谜底包含谜面中所有出现过的字母。
这题算法不难,主要是优化遍历过程,琢磨是给字母编码不过没整明白,这里总结一下题解的思路留待之后查看
2个函数: __builtin_popcount(n)
: 统计一个整数中有多少个1(本题中用作剪枝)注意前面是两道杠
map.count()
:判断map中是否存在一个数
本题的Hashmap建立的是谜底对应的26位二进制数,届时直接与谜面的26位二进制数比较
二进制子集的定义:对于值为1的位,有选与不选两种情况,只修改值为1的位数得到的数为该二进制数的子集
判断是否是二进制子集的方法:(a-1)&a