模拟实现
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param dict string字符串vector
* @param strings string字符串vector
* @return string字符串vector<vector<>>
*/
vector<vector<string> > typeahead(vector<string>& dict, vector<string>& strings) {
int n = dict.size();
unordered_map<char, map<int,set<int>>> m{};
//存储每一个字符的字典位置和字符串的下标
for (int i = 0; i < n; i++) {
int strlength = dict[i].size();
for (int j = 0; j < strlength; j++) {
m[dict[i][j]][i].insert(j);
}
}
vector<vector<string> > res{};
for (auto& sitem : strings) {
int slength = sitem.size();
vector<string> resItem{};
map<int,set<int>> pres{}; //查询字符串首字母,字典位置和字符串的下标
for (int i = 0; i < slength; i++) {
if(i > 0) {
for (auto& mitem : pres) {
int xb = mitem.first;
set<int> titem = mitem.second;
for (auto& t1 : titem) {
//删除不符合的数据
if(t1+i >= dict[xb].size() || dict[xb][t1+i] != sitem[i]) {
mitem.second.erase(t1);
}
}
}
}
if(i == 0) {
pres = m[sitem[i]];
}
}
for (auto& pitem : pres) {
if (pitem.second.size() > 0) {
//如果pres还有数据则必定符合
resItem.push_back(dict[pitem.first]);
}
}
res.push_back(resItem);
}
return res;
}
};