假设有一个拼图字符串,如果以下两个条件均有效,则单词有效-
这个词包含拼图的第一个字母。
对于单词中的每个字母,该字母都是拼图。
假设我们举一个例子,如果谜题是“ abcdefg”,那么有效的单词是“ face”,“ cabbage”等。但是有些无效的单词是“ beefed”的,因为没有“ a”和“ based”,因为没有“ s”,这在拼图中不存在。
我们必须找到答案列表,其中答案[i]是给定单词列表中相对于拼图游戏[i]有效的单词数。
因此,如果输入像单词= [“ aaaa”,“ asas”,“ able”,“ ability”,“ actt”,“ actor”,“ access”],难题= [“ aboveyz”,“ abrodyz”, “ abslute”,“ absoryz”,“ actresz”,“ gaswxyz”],则输出为[1,1,3,2,4,0],作为“ aboveyz”的一个有效词:“ aaaa”,一个“ abrodyz”的有效词:“ aaaa”,“ abslute”的三个有效词:“ aaaa”,“ asas”,“ able”,“ absoryz”的两个有效词:“ aaaa”,“ asas”,四个有效词代表“ actresz”:“ aaaa”,“ asas”,“ actt”,“ access”,并且“ gaswxyz”没有有效的词,因为列表中没有一个词包含字母“G'。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数getMask(),需要s,
遮罩:= 0
对于初始化i:= 0,当i <s的大小时,更新(将i增加1),执行-
mask:= mask或2 ^(s [i]-'a'的ASCII)
返回面具
从主要方法中执行以下操作-
定义一个数组ans
定义一张映射
对于初始化i:= 0,当i <w的大小时,更新(将i增加1),执行-
mask:= mask或getMask(w [i])
字:= w [i]
遮罩:= 0
对于初始化j:= 0,当j <字长时,更新(将j增加1),-
(将m [mask]增加1)
对于初始化i:= 0,当i <p的大小时,更新(将i增加1),执行-
如果current&first不为零,则-
当前:=(当前-1)AND遮罩
字:= p [i]
掩码:= getMask(word)
first:= 2 ^(word [0]-'a'的ASCII)
当前:=遮罩
温度:= 0
当电流> 0时,执行-
在ans的末尾插入temp
返回ans
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << v[i] << ", ";
}
cout << "]"<<endl;
}
typedef long long int lli;
class Solution {
public:
lli getMask(string s){
lli mask = 0;
for(int i =0;i<s.size();i++){
mask|= 1<<(s[i]-'a');
}
return mask;
}
vector<int> findNumOfValidWords(vector<string>& w, vector<string>& p) {
vector <int> ans;
map <lli, lli > m;
for(int i =0;i<w.size();i++){
string word = w[i];
lli mask = 0;
for(int j =0;j<word.size();j++){
mask|= getMask(w[i]);
}
m[mask]++;
}
for(int i = 0; i<p.size();i++){
string word = p[i];
lli mask = getMask(word);
lli first = 1<<(word[0]-'a');
lli current = mask;
lli temp = 0;
while(current>0){
if(current & first)temp+=m[current];
current = (current-1)&mask;
}
ans.push_back(temp);
}
return ans;
}
};
main(){
Solution ob;
vector<string> v = {"aaaa","asas","able","ability","actt","actor","access"};
vector<string> v1 = {"aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"};
print_vector(ob.findNumOfValidWords(v,v1));
}{"aaaa","asas","able","ability","actt","actor","access"},
{"aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"}输出结果
[1, 1, 3, 2, 4, 0, ]