745. Prefix and Suffix Search
Description
Design a special dictionary which has some words and allows you to search the words in it by a prefix and a suffix.
Implement the WordFilter
class:
WordFilter(string[] words)
Initializes the object with thewords
in the dictionary.f(string prefix, string suffix)
Returns the index of the word in the dictionary which has the prefixprefix
and the suffixsuffix
. If there is more than one valid index, return the largest of them. If there is no such word in the dictionary, return-1
.
Constraints
1 <= words.length <= 15000
1 <= words[i].length <= 10
1 <= prefix.length, suffix.length <= 10
words[i]
,prefix
andsuffix
consist of lower-case English letters only.At most
15000
calls will be made to the functionf
.
Approach
Links
GeeksforGeeks
ProgramCreek
YouTube
Examples
Input:
["WordFilter", "f"]
[[["apple"]], ["a", "e"]]
Output:
[null, 0]
Explanation:
WordFilter wordFilter = new WordFilter(["apple"]);
wordFilter.f("a", "e"); // return 0, because the word at index 0 has prefix = "a" and suffix = 'e".
Solutions
/**
* Time complexity :
* Space complexity :
*/
class WordFilter {
private Map<String, Integer> map;
public WordFilter(String[] words) {
map = new HashMap();
for(int i = 0; i < words.length; i++) {
String word = words[i];
List<String> prefix = new ArrayList();
List<String> suffix = new ArrayList();
for(int j = 0; j <= word.length(); j++) {
prefix.add(word.substring(0, j));
suffix.add(word.substring(j));
}
for(String p: prefix) {
for(String s: suffix) {
String key = p + "#" + s;
map.put(key, Math.max(map.getOrDefault(key, 0), i));
}
}
}
}
public int f(String prefix, String suffix) {
String word = prefix + "#" + suffix;
return map.getOrDefault(word, -1);
}
}
/**
* Your WordFilter object will be instantiated and called as such:
* WordFilter obj = new WordFilter(words);
* int param_1 = obj.f(prefix,suffix);
*/
Follow up
Last updated
Was this helpful?