leetcode: Wildcard Matching solution | Sigmainfy 烟客旅人



leetcode: Wildcard Matching solution | Sigmainfy 烟客旅人

Wildcard Matching Problem Description:

Implement wildcard pattern matching with support for '?' and '*'.

'?' Matches any single character.  '*' Matches any sequence of characters (including the empty sequence).    The matching should cover the entire input string (not partial).    The function prototype should be:  bool isMatch(const char *s, const char *p)    Some examples:  isMatch("aa","a") ? false  isMatch("aa","aa") ? true  isMatch("aaa","aa") ? false  isMatch("aa", "*") ? true  isMatch("aa", "a*") ? true  isMatch("ab", "?*") ? true  isMatch("aab", "c*a*b") ? false

Wildcard Matching Solution and Precautions:

(1) recursive solution or DP, F(i, j) denote if s[0]…s[i-1] and p[0]…p[j-1] is matched or not

 F(i, j) = (s[i-1] == p[j-1]) && F(i-1, j-1) if  p[j-1] != '*' or '?'
F(i, j) = F(i-1, j-1)  if  p[j] == '?'
F(i, j) = OR F(i-l, j-1) for l = 0, … i,  if  p[j] == '*'

(2) greedy: whenever encounter '*' in p, keep record of the current position of '*' in p and the current index in s. Try to match the stuff behind this '*' in p with s, if not matched, just s++ and then try to match again.

Wildcard Matching Tips and Divergent thinking:

The dp version need to do memory optimization, otherwise OJ will report memory limit exceeds. Usually, only the greedy approach could pass OJ, the maximum size of the test case in OJ is around 30000^2.


Read full article from leetcode: Wildcard Matching solution | Sigmainfy 烟客旅人


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