【leetcode】第10题:Regular_Expression_Matching (Hard)
来源:互联网 发布:网络传播 传统传播 编辑:程序博客网 时间:2024/06/04 19:37
这道题,我光是看懂他们的代码花了我三天的时间才想明白,现在才明白,有时候不是你想不出来,而是你没有真的的去思考,真的真的佩服leetcode的那些大神,看了他们的代码,那些思想,才知道自己与他们的差距!!!
题目如下:
这里我就直接贴代码,里面的解释都有:
package com.leetcode;public class Solution10 {public static boolean isMatch(String str1,String str2){/*当str1和str2都为空时满足情况,只有当其中一个不为空就返回false * */if(str1.isEmpty()){return str2.isEmpty();}/* * 当str2(正则表达式)只有一个字符时,并且首字符的下一个字符不是*的时候: * 如果当前的字符相等,则str1和str2都后移一个元素 * 如果不相等,或者str1此时为空的时候(注意,不要被上面的判断为空的语句干扰,因为这里是调用的是substring, * 每次更新后str1是子串而不是原来的字符串,也就是说初始字符串不是空,但是子串可以到最后为空) * 也就是说如果str1为空,而且str2只有一个字符,则不匹配 * 否则就str1,str2取下一个字符为首字符,并使之成为子串 * */if(str2.length()==1||str2.charAt(1)!='*'){if(str1.isEmpty()||(str2.charAt(0)!='.'&&str1.charAt(0)!=str2.charAt(0))){return false;}else{return isMatch(str1.substring(1),str2.substring(1));}}/* * 当正则表示式的长度大于1时并且str2.charAt(1)是'*'的时候,并且str2不为空(这个是为了遍历str2)并且首字符相等,或者str2首字符为'.': * 并且判断'*'后面的字符是否与当前的str1的首字符相等,因为'*'可以表示0个它前面的字符,例如:str1="a",str2="a*a"那么这样也是可以匹配的 * 否则就str1后移一个字符,继续循环str2; * * */while(!str2.isEmpty()&&(str1.charAt(0)==str2.charAt(0)||str2.charAt(0)=='.')){if(isMatch(str1,str2.substring(2))){return true;}str1= str1.substring(1);}return isMatch(str1,str2.substring(2));}public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(Solution10.isMatch("aab", "a*b"));}}
0 0
- 【leetcode】第10题:Regular_Expression_Matching (Hard)
- leetcode上面难度hard题
- 第一周 leetcode 224. Basic Calculator(hard)
- [Leetcode 10, Hard] Regular Expression Matching
- LeetCode 1~10(除Hard外)
- [Leetcode 135, Hard] Candy
- leetcode hard problem summary
- 《leetCode》:Sqrt(x)----------hard
- Leetcode. 135 Candy(Hard)
- leetcode hard模式专杀之10Regular Expression Matching
- [Leetcode 56, Hard] Merge intervals
- [Leetcode 57, Hard] Insert Interval
- [Leetcode 164, Hard] Maximal Gap
- [Leetcode 44, Hard] Wildcard match
- [Leetcode 68, Hard] Text Justification
- [Leetcode 47, Hard] Permutations II
- 《leetCode》:Generate Parentheses(hard)
- 《leetCode》:Word Search II-------hard
- 唤醒锁: 检测 Android* 应用中的 No-Sleep(无法进入睡眠)问题
- 安卓基础学习记录1
- CentOS(5.8/6.4)linux生产环境若干优化实战
- 一元多项式的乘法与加法运算
- C++数列求和
- 【leetcode】第10题:Regular_Expression_Matching (Hard)
- 多线程 : 使用 wait 和 notify 实现进程间同步通信
- 编译、链接、目标文件格式学习简记
- Jquery ajax data 格式问题
- python爬虫之cookies
- jsp request跳转页面和response跳转页面
- GB2312的中文编码表
- iOS 在storyboard/xib中设置UIView的圆角等属性
- event.preventDefault方法的使用