Сложность: hard
Создайте специальный словарь, в котором поиск слов осуществляется по префиксу и суффиксу. Реализуйте класс WordFilter: WordFilter(string[] words) Инициализирует объект со словами в словаре. f(string pref, string suff) Возвращает индекс слова в словаре, которое имеет префикс pref и суффикс suff. Если существует более одного допустимого индекса, возвращается наибольший из них. Если в словаре нет такого слова, возвращается -1.
Пример:
Input: letters = ["c","f","j"], target = "a"
Output: "c"
👨💻 Алгоритм:
1⃣Сохраните слова и их индексы в словаре.
2⃣Создайте объединенные ключи, состоящие из префиксов и суффиксов для всех возможных комбинаций.
3⃣Реализуйте функцию поиска, которая ищет наибольший индекс слова по префиксу и суффиксу.
😎 Решение:
using System;
using System.Collections.Generic;
public class WordFilter {
private Dictionary<string, int> prefixSuffixMap = new Dictionary<string, int>();
public WordFilter(string[] words) {
for (int index = 0; index < words.Length; index++) {
string word = words[index];
int length = word.Length;
for (int prefixLength = 1; prefixLength <= length; prefixLength++) {
for (int suffixLength = 1; suffixLength <= length; suffixLength++) {
string prefix = word.Substring(0, prefixLength);
string suffix = word.Substring(length - suffixLength);
string key = prefix + "#" + suffix;
prefixSuffixMap[key] = index;
}
}
}
}
public int F(string pref, string suff) {
string key = pref + "#" + suff;
return prefixSuffixMap.ContainsKey(key) ? prefixSuffixMap[key] : -1;
}
}
Ставь 👍 и забирай 📚 Базу знаний