版权声明:孔庆鑫 https://blog.csdn.net/kongqingxin12/article/details/85770981
916. 单词子集
执行时间408ms
class Solution {
public:
vector<string> wordSubsets(vector<string>& A, vector<string>& B) {
vector<string>ans;
//转换数组A,B的存储方式
vector<map<char, int>> a, b;
for (int l = 0; l < A.size(); ++l) {
map<char, int>tmp;
for (int i = 0; i < A[l].length(); ++i) {
tmp[A[l][i]]++;
}
a.push_back(tmp);
}
map<char, int>sample;
for (int k = 0; k < B.size(); ++k) {
map<char, int> tmp;
int numbers = 1;
sort(B[k].begin(), B[k].end());
for (int i = 0; i < B[k].length(); ++i) {
if (B[k][i] != B[k][i + 1])
{
if (sample[B[k][i]] == 0)
sample[B[k][i]] = numbers;
else
sample[B[k][i]] = max(sample[B[k][i]], numbers);
numbers = 1;
}
else
numbers++;
}
}
//开始处理
for (int j = 0; j < a.size(); ++j) {
if (check(a[j], sample))
ans.push_back(A[j]);
}
return ans;
}
bool check(map<char, int>target, map<char, int>sample)
{
for (auto i = sample.begin(); i != sample.end(); ++i) {
pair<char, int>tmp = *i;
if (target[tmp.first] < tmp.second || target[tmp.first] == 0)
return false;
}
return true;
}
};
执行时间208ms
class Solution {
public:
vector<string> wordSubsets(vector<string>& A, vector<string>& B) {
vector<string>ans;
//整合数组B里每个字母的数量要求
map<char, int>sample;
for (int k = 0; k < B.size(); ++k) {
map<char, int> tmp;
int numbers = 1;
sort(B[k].begin(), B[k].end());
for (int i = 0; i < B[k].length(); ++i) {
if (B[k][i] != B[k][i + 1])
{
if (sample[B[k][i]] == 0)
sample[B[k][i]] = numbers;
else
sample[B[k][i]] = max(sample[B[k][i]], numbers);
numbers = 1;
}
else
numbers++;
}
}
//开始处理
for (int j = 0; j < A.size(); ++j) {
if (check(A[j], sample))
ans.push_back(A[j]);
}
return ans;
}
bool check(string target, map<char, int>sample)
{
map<char, int>count;
sort(target.begin(), target.end());
for (auto i = sample.begin(); i != sample.end(); ++i) {
pair<char, int>tmp = *i;
if (target.find(tmp.first) == string::npos)
return false;
else
{
auto pos_left = target.find(tmp.first);
auto pos_right = target.rfind(tmp.first);
if (pos_right - pos_left + 1 < tmp.second)
return false;
}
}
return true;
}
};