`
ouqi
  • 浏览: 41851 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

[leetcode]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

代码:

 

 
//递归从左至右依次匹配
public boolean isMatch(String s, String p) {
	        // Note: The Solution object is instantiated only once and is reused by each test case.
	        if(s == null||p == null) return false;
	        return isMatch(s,p,0,0);
	    }
	    //递归函数isMatch(s,p,i,j):i 指示 s , j 指示p
	    public boolean isMatch(String s,String p,int i, int j){
	        int slen = s.length();
	        int plen = p.length();
	        
	        
	        if(j>=plen){//递归结束
	            if(i>=slen) return true;
	            else return false;
	        }
	        if(j == plen-1){//j已经指向最后一位,递归结束
	            if(i!=slen-1) return false;
	            if(s.charAt(i) == p.charAt(j)||p.charAt(j) == '.') return true;
	            return false;
	        }
	        
	        char c = p.charAt(j+1);
	        if(c != '*'){//p[j+1] !=‘ * ‘ 说明当前p[j]只能匹配一个
	             if(i<=slen-1&&(s.charAt(i) == p.charAt(j)||p.charAt(j) =='.'))
                          return isMatch(s,p,i+1,j+1);//继续匹配后续字符串 
                     else
	                  return false;
	        }else{
                 //匹配0(注意可以是0个,所以i没有++)到多个p[j]或者任意字符(p[j] =='.' )
 	            while(i<=slen-1&&(s.charAt(i) == p.charAt(j)||p.charAt(j) =='.')){
	                if(isMatch(s,p,i,j+2)) return true;
	                i++;
	            }
	            return isMatch(s,p,i,j+2);//走到第一个不匹配的之后,继续后续过程
	        }
	    }

 

 

 

 

 

分享到:
评论

相关推荐

    c语言-leetcode 0010-regular-expression-matching.zip

    c c语言_leetcode 0010_regular_expression_matching.zip

    LeetCode 刷题汇总1

    * 正则表达式匹配(Regular Expression Matching):实现正则表达式匹配。 * 实现strStr()(Implement strStr()):实现字符串搜索算法。 7. 排序和搜索: * 合并两个排序列表(Merge Two Sorted Lists):合并两...

    LeetCode题解(java语言实现).pdf

    * Regular Expression Matching in Java:该题目要求匹配字符串和正则表达式,实现方法使用了动态规划算法。 * Merge Intervals:该题目要求合并重叠的区间,实现方法使用了排序和迭代算法。 * Insert Interval:该...

    leetcode中国-leetcode:leetcode刷题

    Expression Matching 递归匹配 wildcard matching 动态规划 longest common prefix , 简单 valid number, hard, 用有限自动机 integer to roman ,easy , 模拟 roman to integer ,easy , 模拟 count and say , easy ,...

    LeetCode题解 - Java语言实现-181页.pdf

    8. Regular Expression Matching in Java 正则表达式匹配是一个字符串问题,要求使用正则表达式来匹配字符串。可以使用Java的Pattern和Matcher类来解决该问题。 9. Merge Intervals 区间合并是一个数组问题,要求...

    leetcode338-LeetCode:LeetCode刷题总结

    LeetCode刷题总结 1.Two Sum 2.Add Two Numbers 3.Longest Substring Without Repeating Characters 4.Median of Two Sorted Arrays 5.Longest Palindromic Substring (Manacher算法待完成) 6.ZigZag Conversion 7....

    分割数组求最大差值leetcode-Leetcode-Road:LeetCode刷题记录

    分割数组求最大差值leetcode LeetCode 学习之路 记录自己完成LeetCode的代码和结果。...Expression Matching 25.3% 困难 11 Container With Most Water 59.3% 中等 12 Integer to Roman 61.8% 中等 13 Roman to In

    leetcode530-algorithm:算法

    Expression Matching 011 Container With Most Water 012 Integer to Roman 013 Roman to Integer 014 Longest Common Prefix 015 3Sum 016 3Sum Closest 017 Letter Combinations of a Phone Number 018 4Sum 020 ...

    LeetCode前400题Java精美版

    10. **Regular Expression Matching** (Hard): 实现正则表达式的匹配功能,涉及递归或动态规划的算法。 11. **Container With Most Water** (Medium): 求两个非降序数组中的最大面积水杯。双指针法是常用的解决策略...

    leetcode添加元素使和等于-leetcode:我的leetcode解决方案

    leetcode添加元素使和等于 经验教训 一定要吧功能尽量细化为函数,这样一者做题思路比较清晰,二者可以在某些情况下直接return值。 如果输入的形式是一个序列,则可以想想:分治、动规、贪婪,一般不建议搜索,因为...

    leetcode写题闪退-LeetCode:leetcodeOJ

    leetcode写题闪退 #*的多少代表此题的有意思程度 有几题第一次写的时候思绪比较混乱: *****Regular Expression Matching 2014.10.29 对于Find Minimum in Rotated Sorted Array II 和 Find Minimum in Rotated ...

    Coding Interview In Java

    10 Regular Expression Matching in Java 39 11 Merge Intervals 43 12 Insert Interval 45 13 Two Sum 47 14 Two Sum II Input array is sorted 49 15 Two Sum III Data structure design 51 16 3Sum 53 17 4Sum 55...

    LeetCode-in-Golang:使用 Golang 解答 LeetCode

    35%2☆ ☆27%3☆ ☆24%4☆ ☆ ☆21%5☆ ☆25%6☆ ☆26%7☆24%8☆ ☆13%9Palindrome Number☆35%10Regular Expression Matching☆ ☆ ☆24%:red_heart:11Container With Most Water☆ ☆36%12Integer to R

    lrucacheleetcode-luoleet:LeetcodesolutionsbyXinhangLuoandQinghaoDai

    https://leetcode.com/problems/regular-expression-matching/ Regular Expression Matching 100 https://leetcode.com/problems/same-tree/ Same Tree 101 https://leetcode.com/problems/symmetric-tree/ ...

    Python_leetcode.zip

    "regular-expression-matching.py"考察的是字符串匹配和回溯算法。Python的字符串操作和递归可以构建出复杂的正则表达式匹配算法,帮助解决复杂的文本处理问题。 "palindrome-pairs.py"是关于回文串和字符串匹配的...

    LeetCode答案大全

    10. Regular Expression Matching:实现正则表达式匹配,需要使用动态规划来解决。 11. Container With Most Water:给定一个包含n个非负整数的数组,设计一个算法找出其中两个数,使得它们与x轴构成的容器可以容纳...

    leetcodepython001-algorithm:leetcode问题(cpp、java、python),书籍破解_the_coding

    leetcode Python 001 leetcode的算法问题 这是我的解决方案,用 ...Expression Matching 011. Container With Most Water 012. Integer to Roman 013. Roman to Integer 014. Longest Common Prefix 019. R

    leetcode答案-leetcode:leetcode

    leetcode 答案 leet code 这是我的leetcode答案,语言主要是用python。很多算法不是最优,甚至很槽糕,有空就会优化 目前完成了: Two Sum Add Two Numbers Longest ...Regular Expression Matching

    leetcode代码200题c++

    9. **Regular Expression Matching**:这个涉及到字符串匹配和动态规划。实现一个函数来判断一个字符串是否匹配特定的正则表达式模式。 10. **N-Queens**:这是著名的N皇后问题,考察回溯算法和对角线检查。目标是...

    leetcode跳跃-LeCode:乐科

    leetcode 跳跃 LeetCode Solved by ...Expression Matching 正则表达式匹配 11. Container With Most Water 盛最多水的容器 12. Integer to Roman 整数转罗马数字 13. Roman to Integer 罗马数字转

Global site tag (gtag.js) - Google Analytics