zoukankan      html  css  js  c++  java
  • 【LeetCode-面试算法经典-Java实现】【010-Regular Expresssion Matching(正則表達式匹配)】

    【010-Regular Expresssion Matching(正則表達式匹配)】


    【LeetCode-面试算法经典-Java实现】【全部题目文件夹索引】

    原题

      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个或者多个前导字符

    解题思路

      使用标记匹配算法法。从后向前进行匹配。

    代码实现

    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;
    
            // 对模式串从后向前进行处理
            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];
        }
    }

    评測结果

      点击图片,鼠标不释放。拖动一段位置。释放后在新的窗体中查看完整图片。

    这里写图片描写叙述

    特别说明

    欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/46951847

  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7353294.html
Copyright © 2011-2022 走看看