题目描述
题目地址.
思路
dfs 递归排列组合 然后for循环查找对比 超时 复杂度O(n*n!)
map 查表 将单词表以空间换时间用map存储
vector 查表 以vector代替map查表
代码
class Solution {
public:
int method1(vector<string>& words, string chars)
{
int count=0;
map <int,int> tab;
for(int i=0;i<chars.size();i++)
{
tab[chars[i]-'0']++;
}
for(auto wor:words)
{
map <int,int> temp(tab);
int i;
for(i=0;i<wor.size();i++)
{
if((temp[(wor[i]-'0')]--) == 0)
break;
}
if(i==wor.size())
{
count += wor.size();
}
}
return count;
}
int countCharacters(vector<string>& words, string chars) {
int count=0;
vector<unsigned char> tab(27,0);
//建立表
for(int i=0;i<chars.size();i++)
{
tab[chars[i]-'a']++;
}
for(auto wor:words)
{
vector<unsigned char> temp(tab);
int i;
for(i=0;i<wor.size();i++)
{
if((temp[(wor[i]-'a')]--) == 0)
break;
}
if(i==wor.size())
{
count += wor.size();
}
}
return count;
}
};
重难点分析
对于c++ string 数据类型 拆分 string str str[i]为char数据类型,所以转换为int为 str[i] - 'a’
如果是string转换为int 则用 stoi() int 转string为 to_string();
在这里 vector时间战胜了map, map 268 vector 68