using System.Collections.Generic;
public class MagicDictionary
private Dictionary<int, List<string>> map;
map = new Dictionary<int, List<string>>();
public void BuildDict(string[] dictionary)
foreach(var str in dictionary)
if(!map.ContainsKey(str.Length))
map.Add(str.Length, new List<string>(){ str });
map[str.Length].Add(str);
public bool Search(string searchWord)
if(!map.ContainsKey(searchWord.Length))
var listOfStrings = map[searchWord.Length];
foreach(string str in listOfStrings)
for(int i = 0; i < str.Length; i++)
if(str[i] != searchWord[i])
public static void Main()
MagicDictionary magicDictionary = new MagicDictionary();
magicDictionary.BuildDict(new string[]{"hello", "leetcode"});
var canChangeOneChar = magicDictionary.Search("leetcoded");
Console.WriteLine(canChangeOneChar);