美文网首页
lintcode-正则表达式匹配

lintcode-正则表达式匹配

作者: 鬼谷神奇 | 来源:发表于2016-06-04 20:58 被阅读301次

Java版

public boolean isMatch(String s, String p) {
        // write your code here
        if (p.length() == 0)
            return s.length() == 0;

        if (p.length() == 1)
            return (s.length() == 1) && (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.');

        if (p.charAt(1) != '*')
        {
            if (s.length() == 0)
                return false;
            else
                return (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.')
                       && isMatch(s.substring(1), p.substring(1));
        }
        else
        {
            while (s.length() > 0 && (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.'))
            {
                if (isMatch(s, p.substring(2)))
                    return true;
                s = s.substring(1);
            }
            return isMatch(s, p.substring(2));
        }
    }
http://blog.csdn.net/derrantcm/article/details/46951847
import java.util.Arrays;

public class Solution {
    /**
     * 010-Regular Expresssion Matching(正则表达式匹配)
     * 
     * @param s 匹配串
     * @param p 模式串
     * @return 匹配结果,true匹配,false不匹配
     */
    public boolean isMatch(String s, String p) {
        // 标记数数组
        boolean[] match = new boolean[s.length() + 1];
        // 初始化
        Arrays.fill(match, false);
        // 假定最后的结果是匹配的
        match[s.length()] = true;
        
        //要判断p的长度
        if (p.length() == 1)
            return (s.length() == 1) && (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.');

        // 对模式串从后向前进行处理
        for (int i = p.length() - 1; i >= 0; i--) {

            // 如果当前是*
            if (p.charAt(i) == '*') {

                // 匹配串从最后一个开始处理
                for (int j = s.length() - 1; j >= 0; j--)  {
                    match[j] = match[j] || match[j + 1] && (p.charAt(i - 1) == '.' || s.charAt(j) == p.charAt(i - 1));
                }
                i--;
            }
            // 如果不是*
            else {
                for (int j = 0; j < s.length(); j++) {
                    match[j] = match[j + 1] && (p.charAt(i) == '.' || p.charAt(i) == s.charAt(j));
                }

                match[s.length()] = false;
            }
        }
        return match[0];
    }
}

C++版,有bug

bool isMatch(const char *s, const char *p) {
        // write your code here
        
        if(strlen(s) == 0 && strlen(p) == 0) {
            return true;
        }
        
        if(strlen(p) == 1)
            return strlen(s) == 1 && (s[0] == p[0] || p[0] == '.');
        
        if(p[1] == '*') {
            while(strlen(s) > 0 && s[0] == p[0] || p[0] == '.') {
                if(isMatch(s, p+2)) {
                    return true;
                }
                
                s++;
            }
            
            return isMatch(s, p+2);
        }
        else 
        {
            if(strlen(s) == 0) {
                return false;
            }
            
            if(s[0] == p[0] || p[0] == '.') {
                return isMatch(s+1, p+1);
            }
        }
        
        
        
        return false;
    }

相关文章

  • lintcode-正则表达式匹配

    Java版 C++版,有bug

  • lintcode-通配符匹配

    时间复杂度O(mn),dp[i][j] 代表字符串s的前i个字符和字符串p的前j个字符是否匹配,可以匹配两个字符串...

  • Nginx 匹配规则

    无 :默认匹配,普通匹配 = :精确匹配 ~* :匹配正则表达式,不区分大小写 ~ :匹配正则表达式,区分大小写 ...

  • 2019.8.15分享:正则表达式字符匹配攻略

    一、正则表达式 正则表达式是匹配模式,要么匹配字符,要么匹配位置。 这次分享主要将提下正则表达式字符匹配 • 两种...

  • python与正则表达式 2020-01-02(未经允许,禁止转

    正则表达式 正则表达式与程序语言无关。正则表达式做匹配实际上就做3件事:【字符匹配】+【次数匹配】+【逻辑匹配】下...

  • 《javaScript正则表达式迷你书》(一)

    正则表达式字符匹配攻略 正则表达式是匹配模式,要么匹配字符,要么匹配位置。 两种模糊匹配 如果正则只有精确匹配是没...

  • 正则加^$与不加的区别

    加^$的正则表达式,表示完整匹配。 正则表达式匹配内容匹配结果说明/bc/abcdefg成功包含就能匹配成功/^a...

  • 正则表达式收集

    常用正则表达式大全 常用正则表达式大全!(例如:匹配中文、匹配html) 匹配中文字符的正则表达式:[u4e00-...

  • 正则表达式位置匹配攻略

    来源:正则表达式位置匹配攻略作者:老姚(转载已获得作者授权) 正则表达式是匹配模式,要么匹配字符,要么匹配位置。 ...

  • 正则表达式字符匹配攻略

    来源:正则表达式字符匹配攻略作者:老姚(转载已获得作者授权) 正则表达式是匹配模式,要么匹配字符,要么匹配位置。请...

网友评论

      本文标题:lintcode-正则表达式匹配

      本文链接:https://www.haomeiwen.com/subject/gltldttx.html