zoukankan      html  css  js  c++  java
  • 10. Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'.

    '.' Matches any single character.
    '*' Matches zero or more of the preceding element.
    
    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", "a*") → true
    isMatch("aa", ".*") → true
    isMatch("ab", ".*") → true
    isMatch("aab", "c*a*b") → true

    思路:在出现*的时候,因为可能出现0,1,2,...次,所以要使用到带回溯的递归

    bool backTracking(char* s, char* p, int p1, int p2){
        while(p[p2] != ''){//when s ends, p maybe not end, Eg: p left a*, it also should return true.So the end condition is p = ''
            if(p[p2+1] == '*'){
                while(s[p1] == p[p2] || (p[p2] == '.'  && s[p1] != '')){//'.' matches all letters except ''
                  if(backTracking(s,p,p1,p2+2)) return true; 
                  p1++;
                } 
                p2+=2;
            }
            else if(s[p1] == p[p2] || (p[p2] == '.'  && s[p1] != '')){ 
                p1++;
                p2++;
            }
            else return false;
        }
        if(s[p1] == '') return true; //when p ends, s must end
        else return false;
    }
    
    bool isMatch(char* s, char* p) {
        return backTracking(s,p,0,0);
    }
  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/5366402.html
Copyright © 2011-2022 走看看