/// <summary> /// Searches for a valid scrabble word. /// </summary> /// <param name="word">The word</param> /// <returns>The scrabble word if valid, null if no match found.</returns> public IScrabbleWord Search(string word) { var sWord = default(IScrabbleWord); if (!string.IsNullOrWhiteSpace(word)) { if (_roots.ContainsKey(word[0])) { var path = SearchForScrabblePath(_roots[word[0]], word); if (path.Count == word.Length && path[path.Count - 1].IsEnd) { // check we matched the whole provided word AND that we completed a word. var scrabbleWord = new ScrabbleWord(); foreach (var node in path) { scrabbleWord.Add(ScrabbleTileFactory.Get(node.Value)); } sWord = scrabbleWord; } } } return(sWord); }