Class StreamChecker

java.lang.Object
g1001_1100.s1032_stream_of_characters.StreamChecker

public class StreamChecker extends Object
1032 - Stream of Characters.<p>Hard</p> <p>Design an algorithm that accepts a stream of characters and checks if a suffix of these characters is a string of a given array of strings <code>words</code>.</p> <p>For example, if <code>words = [&quot;abc&quot;, &quot;xyz&quot;]</code> and the stream added the four characters (one by one) <code>'a'</code>, <code>'x'</code>, <code>'y'</code>, and <code>'z'</code>, your algorithm should detect that the suffix <code>&quot;xyz&quot;</code> of the characters <code>&quot;axyz&quot;</code> matches <code>&quot;xyz&quot;</code> from <code>words</code>.</p> <p>Implement the <code>StreamChecker</code> class:</p> <ul> <li><code>StreamChecker(String[] words)</code> Initializes the object with the strings array <code>words</code>.</li> <li><code>boolean query(char letter)</code> Accepts a new character from the stream and returns <code>true</code> if any non-empty suffix from the stream forms a word that is in <code>words</code>.</li> </ul> <p><strong>Example 1:</strong></p> <p><strong>Input</strong> [&ldquo;StreamChecker&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;, &ldquo;query&rdquo;] [<a href="&quot;cd&quot;,-&quot;f&quot;,-&quot;kl&quot;">&quot;cd&quot;, &quot;f&quot;, &quot;kl&quot;</a>, [&ldquo;a&rdquo;], [&ldquo;b&rdquo;], [&ldquo;c&rdquo;], [&ldquo;d&rdquo;], [&ldquo;e&rdquo;], [&ldquo;f&rdquo;], [&ldquo;g&rdquo;], [&ldquo;h&rdquo;], [&ldquo;i&rdquo;], [&ldquo;j&rdquo;], [&ldquo;k&rdquo;], [&ldquo;l&rdquo;]]</p> <p><strong>Output:</strong> [null, false, false, false, true, false, true, false, false, false, false, false, true]</p> <p><strong>Explanation:</strong></p> <pre><code> StreamChecker streamChecker = new StreamChecker([&quot;cd&quot;, &quot;f&quot;, &quot;kl&quot;]); streamChecker.query(&quot;a&quot;); // return False streamChecker.query(&quot;b&quot;); // return False streamChecker.query(&quot;c&quot;); // return False streamChecker.query(&quot;d&quot;); // return True, because 'cd' is in the wordlist streamChecker.query(&quot;e&quot;); // return False streamChecker.query(&quot;f&quot;); // return True, because 'f' is in the wordlist streamChecker.query(&quot;g&quot;); // return False streamChecker.query(&quot;h&quot;); // return False streamChecker.query(&quot;i&quot;); // return False streamChecker.query(&quot;j&quot;); // return False streamChecker.query(&quot;k&quot;); // return False streamChecker.query(&quot;l&quot;); // return True, because 'kl' is in the wordlist </code></pre> <p><strong>Constraints:</strong></p> <ul> <li><code>1 <= words.length <= 2000</code></li> <li><code>1 <= words[i].length <= 2000</code></li> <li><code>words[i]</code> consists of lowercase English letters.</li> <li><code>letter</code> is a lowercase English letter.</li> <li>At most <code>4 * 10<sup>4</sup></code> calls will be made to query.</li> </ul>
  • Constructor Details

    • StreamChecker

      public StreamChecker(String[] words)
  • Method Details

    • insert

      public void insert(String s)
    • query

      public boolean query(char letter)