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

    题目

    mplement 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
    

    思路

    这里写图片描写叙述

    代码

    /*------------------------------------------------------------------------------------
    *   日期:2014-04-03
    *   作者:SJF0115
    *   题目: 10.Regular Expression Matching
    *   来源:http://oj.leetcode.com/problems/regular-expression-matching/
    *   结果:AC
    *   来源:LeetCode
    ------------------------------------------------------------------------------------*/
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    
    class Solution {
    public:
        bool isMatch(const char *s, const char *p) {
            if(s == NULL || p == NULL || *p == '*') {
                return false;
            }
            if(*p == '') return *s == '';
            //next char is not '*': must match current character
            if(*(p+1) != '*') {
                if(*s == '') return false;
                if(*p != '.' && *p != *s) return false;
                return isMatch(s+1,p+1);
            }
            //next char is '*'
            else {
                int slen = strlen(s);
                if(isMatch(s,p+2)) return true;
                for(int i = 0; i < slen; ++i) {
                    if(*p!='.' && *p != *(s+i)) return false;
                    if(isMatch(s+i+1,p+2)) return true;
                }
                return false;
            }
        }
    };
    
    int main() {
        Solution solution;
        char* s = "abcbcd";
        char* p = "ab*bbc";
        bool result = solution.isMatch(s,p);
        cout<<result<<endl;
        return 0;
    }
  • 相关阅读:
    jvm 虚拟机参数_新生代内存分配
    jvm 虚拟机参数_堆内存分配
    Xshell 安装 Xftp
    使用 Xshell 连接 linux 系统
    linux 常用命令
    java JSON 和 Object 相互转换
    vsftp实现只能上传不能下载、删除权限配置
    从返回的HTTP Header信息中隐藏Apache的版本号及PHP的X-Powered-By信息
    在SecureCRT中无需输入密码登录Linux主机
    ssh 设置私钥实现两台linux主机无密码访问
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5276656.html
Copyright © 2011-2022 走看看