package com.madbean.kata8.readable; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * * @author Matt Quail * @see Kata 8 */ public class FastAlg extends BaseAlg { private ArrayList wordSets = new ArrayList(10); public void addWord(String word) { int len = word.length(); // grow wordSets to length 'len', initing with HashSets for (int i = wordSets.size(); i <= len; i++) { wordSets.add(new HashSet()); } Set set = (Set) wordSets.get(len); set.add(word); } public void iterateOverPotentialResultWords() { for (int wordLen = 1; wordLen <= wordSets.size(); wordLen++) { if (!isValidResultWordLength(wordLen)) { continue; } Set findWords = (Set) wordSets.get(wordLen); for (Iterator i = findWords.iterator(); i.hasNext();) { String word = (String) i.next(); generateSubstrings(word); } } } public boolean validWords(String leadingWord, String trailingWord) { Set leadingSet = (Set) wordSets.get(leadingWord.length()); Set trailingSet = (Set) wordSets.get(trailingWord.length()); return leadingSet.contains(leadingWord) && trailingSet.contains(trailingWord); } }