【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】
【LeetCode-面试算法经典-Java实现】【010-Regular Expresssion Matching(正則表達式匹配)】的更多相关文章
- 黑马程序猿————Java基础日常笔记---反射与正則表達式
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...
- java正則表達式的坑
java中正則表達式比較有意思,这里列举几个常见的坑 1.[]符号,中括号表示当中的数据都是或的关系 假设[\\w+]是匹配条件 abc能否够匹配的到呢? 首先\\w(注意这里没有中括号)表示a-z ...
- JAVA中正則表達式总结
昨天,我的朋友请教我正則表達式.我也好久没有写过正則表達式了,昨天刚好看了下如鹏网创始人杨中科老师关于正則表達式的解说.使我加深了正則表達式的印像.现我把他总结下: 很多语言,包含Perl.PHP.P ...
- JAVA中正則表達式总结(具体解释及用途)
很多语言,包含Perl.PHP.Python.JavaScript和JScript,都支持用正則表達式处理文本,一些文本编辑器用正則表達式实现高级"搜索-替换"功能.所以JAVA语 ...
- Java正則表達式入门
众所周知,在程序开发中,难免会遇到须要匹配.查找.替换.推断字符串的情况发生,而这些情况有时又比較复杂,假设用纯编码方式解决,往往会浪费程序猿的时间及精力.因此,学习及使用正則表達式,便成了解决这一 ...
- Java正則表達式语法
Java正則表達式语法 字符 说明 \ 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.比如,"n"匹配字符"n"."\n"匹配换行 ...
- Java正則表達式
近期工作中常常要用到正則表達式,不得不花点时间对其进行一定的学习. JDK中提供了2个类来支持正則表達式,各自是java.util.regex.Pattern和java.util.regex.Ma ...
- HDU-1039-Easier Done Than Said?(Java && 没用正則表達式是我的遗憾.....)
Easier Done Than Said? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- Java正則表達式演示样例
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public s ...
随机推荐
- Python9-面对对象2-day23
#计算正方形的周长和面积 class Square: def __init__(self,side_len): self.side_len = side_len def perimeter(self) ...
- (转)TDD的iOS开发初步以及Kiwi使用入门
本文转自“瞄神”博客 TDD的iOS开发初步以及Kiwi使用入门 测试驱动开发(Test Driven Development,以下简称TDD)是保证代码质量的不二法则,也是先进程序开发的共识.App ...
- 杭电 1503 Advanced Fruits
Description The company "21st Century Fruits" has specialized in creating new sorts of fru ...
- luogu2216 [HAOI2007]理想的正方形
先对于每一行中长度为 n 的列用单调队列搞出它们的最小/大值,再将这些长度为 n 的列想象成点再对行跑一遍 #include <iostream> #include <cstring ...
- Clojure基础
最近看了一段clojure,下面是从书上摘下来的一下语言基础的精华部分 ;函数的基本形式 (defn average [numbers] (/ (apply + numbers) (count num ...
- 防火墙iptables介绍
防火墙: netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统.该架构可以实现数据包过滤,网络地址转换以及数据包管理功能.linux中防火墙分为两部分:netf ...
- OSQL 用法
osql中的启动参数如下: -?:列出osql各个参数的语法摘要. -U login_id:用来指出登录名称,登录名区分大小写. -P password:用来指出登录名称所对应的密码. -E:表示采用 ...
- BZOJ 3282 Tree ——Link-Cut Tree
[题目分析] 明显的LCT维护连通性的题目. access的操作是比较巧妙的,可以把结点到根变成偏爱路径,而且保证了该点是链上深度最深的点. 而且需边的思想也很巧妙,保证了复杂度. 但是只能用于修改路 ...
- PHP简单留言板
<?php header("Content-Type:text/html;charset=utf8"); $filename = "message.txt" ...
- Biorhythms(poj 1006)
Description 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰 ...