Solution for: Minimum window in String in O(n) | My Developed World



Solution for: Minimum window in String in O(n) | My Developed World

What I've personally found tricky in this problem was to realize the algorithm. I tried to imagine, without writing, a solution. I tried to imagine the string, the chars, the indexes to keep track of the windows, and so on. This way, I couldn't even think about a naive O(n^2) solution. I was stuck.

What can we do when we are stuck on a problem? Have a break. Try to free our mind for a little while. Have some fun/relaxing activities and in the end come back to break the problem down, armed with pen and paper. Yes, pen and paper. Drawing an instance of the problem is the best way to catch what we are missing, moreover breaking a problem in smaller part is the best way to focus on different aspects of the problem, without get stuck blinded from the whole complexity.

Let's start from the smallest unit of the problem question: the window. What exactly is a window in this context? A window in this context is a string itself. It is a subset of the input string S, which contains all the chars in T. An important property of a window is how its edges are defined, this is the keystone of the problem, and as long as I had not realized/formalized it, I could not solve the problem.

window of chars on a string

The figure above shows two examples of window over S given T. Focusing on the edges of these two windows,we can easily see that they are chars from the set T. So, the window is always bounded by two different characters of T and, if we imagine to scroll the string S from left to right, once we have found all the chars in T, we know that we have found a window and this windows can be calculated as all the chars of S between the "furthest" char of T from the current position and the char of T we just found at the current position (the closest).


Read full article from Solution for: Minimum window in String in O(n) | My Developed World


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts