Build an in-memory dictionary that stores words and their meanings.
It lets users fetch meanings, supports prefix search. It also checks word existence with a “.” wildcard pattern.
See methods and examples for clarity.
It lets users fetch meanings, supports prefix search. It also checks word existence with a “.” wildcard pattern.
See methods and examples for clarity.
Methods
1) void storeWord(String word, String meaning)
- Insert or update the mapping
(word → meaning). - Both word and meaning will be lowercase and non blank
- 'meaning' will overwrite any older 'meaning' if one already exists for 'word'.
- word contains only lowercase letters [a-z], space ' ', hyphen '-'
- word will never contain the dot (.) character.
2) String getMeaning(String word)
- Return the meaning for
wordif it exists, otherwise return the empty string"". - Constraints:
wordis lowercase, non-blank
3) List[String] searchWords(String prefix, int n)
- Return up to
nwords that start withprefix, sorted lexicographically (ascending). - If fewer than
nmatches exist, return all matches. - Constraints:
prefixis non-blank, lowercase,1 ≤ n.
4) boolean exists(String word)
- Return
trueif at least one stored word matches the pattern inword, elsefalse. - The pattern may include one or more dots
., where each.matches exactly one letter (a-z, space, hyphen) in 'word'. - Non-dot characters must match exactly, pattern length must equal candidate word length.
- Stored words never contain
., only the query pattern may include dots.
Examples
Assume the dictionary starts empty.
- Store, Overwrite, and Fetch
storeWord("apple", "a fruit")getMeaning("apple")→"a fruit"storeWord("apple", "sweet fruit")(overwrites)getMeaning("apple")→"sweet fruit"getMeaning("apples")→""(no such word)
- Prefix Search with Sorting and Limit
- Insert:
storeWord("app", "short for application")storeWord("apple", "sweet fruit")storeWord("apply", "make a formal request")storeWord("apt", "suitable")storeWord("banana", "yellow fruit")
searchWords("ap", 3)→["app", "apple", "apply"]searchWords("app", 10)→["app", "apple", "apply"]searchWords("b", 2)→["banana"]
- Insert:
- Existence with
.Wildcards- Suppose stored words:
{"cat","cap","caps","map","man","many"} exists("cat")→trueexists("c.t")→true(e.g., matches"cat")exists("ca.")→true(matches"cat","cap")exists("..p")→true(matches"cap","map")exists("c..s")→true(matches"caps")exists("....")→true(matches"caps")exists("c..")→true(matches"cat","cap")exists("c.")→false(no two-letter words starting withc)exists("...y")→true(matches"many")
- Suppose stored words: