Given many words
, words[i]
has weight i
.
Design a class WordFilter
that supports one function, WordFilter.f(String prefix, String suffix)
.It will return the word with given prefix
and suffix
with maximum weight. If no word exists, return -1.
Examples:
Input: WordFilter(["apple"]) WordFilter.f("a", "e") // returns 0 WordFilter.f("b", "") // returns -1
Note:
words
has length in range[1, 15000]
.- For each test case, up to
words.length
queriesWordFilter.f
may be made. words[i]
has length in range[1, 10]
.prefix, suffix
have lengths in range[0, 10]
.words[i]
andprefix, suffix
queries consist of lowercase letters only.
实现一个WordFilter类,要求保存一系列单词,并提供方法f:给定前缀和后缀,查出符合前缀和后缀的的单词,返回这些单词对应的值的最大值。我的想法比较粗暴(但能通过),将全部前缀和全部后缀做笛卡尔积,每个组合连接起来作为键值,值为当前单词的权值(如果有重复的键值,值肯定会更新为最大,因为权值是单词序列的下标)。f函数只要返回前缀和后缀连接起来的键值对应的值即可。
代码:
class WordFilter {
public:
WordFilter(vector<string> words) {
for(int k = 0; k < words.size(); ++k) {
for(int i = 0; i <= words[k].size(); ++i) {
for(int j = 0; j <= words[k].size(); ++j) {
string key = words[k].substr(0, i) + "+" + words[k].substr(j);
xxxfix[key] = k;
}
}
}
}
int f(string prefix, string suffix) {
string key = prefix+"+"+suffix;
if(xxxfix.find(key) != xxxfix.end()) {
return xxxfix[key];
}
return -1;
}
private:
unordered_map<string, int> xxxfix;
};