剑指offer系列26--正则表达式匹配
【题目】请实现一个函数用来匹配包括’.’和’*‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但是与”aa.a”和”aba”均不匹配
package com.exe6.offer;
/**
* 【题目】请实现一个函数用来匹配包括’.’和’*‘的正则表达式。模式中的字符’.’表示任意一个字符,
* 而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。
* 例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但是与”aa.a”和”aba”均不匹配
* @author WGS
*
*/
public class MatchRegString { public boolean match(char[] str,char[] pattern){
if(str==null ||pattern==null)
return false;
return matchCore(str,0,str.length,pattern,0,pattern.length);
} public boolean matchCore(char[] str, int i, int length1, char[] pattern, int j, int length2) {
if(i==length1 && j==length2){
return true;
/*if(j==length2 || pattern[j]=='*'){
return true;
}else{
return false;
}*/
}
if(i!=length1 && j==length2){
return false;
}
//3 当pattern中下一个字符有'*'时
if(j+1<length2 && pattern[j+1]=='*'){
//① a A a与a A * a 即*前值与str中要比较的值相同
// a A a与a . * a
if(str[i]==pattern[j]){
//后移两位
return matchCore(str,i+1,length1,pattern,j+2,length2)
//在原状态
|| matchCore(str,i+1,length1,pattern,j,length2)
//忽略
|| matchCore(str,i+1,length1,pattern,j+2,length2);
}
//②a A a与a B * a 即*前值与str中要比较的值不同 pattern就忽略*前的值,后移两位继续比较,str 值不变
else{
return matchCore(str,i,length1,pattern,j+2,length2);
}
} //1 2 当前字符匹配或者匹配'.' 两者均右移一位继续比较;
if(i<length1 && (str[i]==pattern[j] || pattern[j]=='.')){
return matchCore(str,i+1,length1,pattern,j+1,length2);
}
return false;
} public static void main(String[] args) {
char[] str=new char[]{'a', 'a', 'a'};
char[] pattern=new char[]{'a', 'b','*','a', 'c','*','a'};
MatchRegString m=new MatchRegString();
boolean b=m.match(str, pattern);
System.out.println(b); } }
剑指offer系列26--正则表达式匹配的更多相关文章
- 干货 | 剑指offer系列文章汇总
下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现 剑指offer系列 始 剑指offer—灯管问题(1) 剑指offer—10人电梯(2) ...
- 剑指offer 面试26题
面试26题: 题目:树的子结构 题:输入两棵二叉树A和B,判断B是不是A的子结构. 解题思路:递归,注意空指针的情况. 解题代码: # -*- coding:utf-8 -*- # class Tre ...
- 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------>剑指offer系列
题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offe ...
- 剑指offer系列59---寻找丑数
[题目]把只包含因子2.3和5的数称作丑数(Ugly Number). * 例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 解法一 ...
- 剑指offer系列62---两个链表的公共结点
[题目]输入两个链表,找出它们的第一个公共结点. * [思路]1 获取两链表的长度: * 2 让长的链表先走n步后此时走到短链表起始位置: * 3 两链表同时遍历,直至相同,这时返回第一个公共结点. ...
- 剑指offer系列61---数组中的逆序对
[题目]在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. * [思路]运用归并排序的思想. * 首先将数组分成两个子数组,统 ...
- 剑指offer系列60---第一个只出现一次的字符
[题目]在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置. * 若为空串,返回-1.位置索引从0开始 * [思路]1 首先遍历字符串数组,添 ...
- 剑指offer系列58---把数组排成最小的数
[题目]输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. * 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323.[思路]1 ...
- 剑指offer系列57---整数中1出现的次数
[题目]求出1~n的整数中1出现的次数.(10进制) package com.exe11.offer; /** * [题目]求出1~n的整数中1出现的次数. * @author WGS * */ pu ...
随机推荐
- ubuntu 下建立桌面快捷方式
1)新建文件eclipse.desktop,命令如下: sudo vim /usr/share/applications/eclipse.desktop 2)在新建文件中添加如下内容并保存: [Des ...
- ZOJ 1202 Divide and Count
原题链接 题目大意:某人手上有一大批钻石,他同时有一些盒子恰好放下这些钻石,每个盒子可以放一个或多个,问一共有几种方法. 解法:这其实是一道排列与组合计算题,主要是写出组合算法的代码,把计算公式转为程 ...
- ZOJ 1234 Chopsticks
原题链接 题目大意:有这么一个公式 A,B,C(A<=B<=C), (A-B)^2来衡量这对数字的好坏,值越小越好.现在给出一个数组,要求每三个配对,最后得到的每组值总和最小. 解法:我是 ...
- 在VS2010下配置OpenCV 2.3
一.下载OpenCV 2.3: http://www.opencv.org.cn/download/OpenCV-2.3.0-win-superpack.exe 二.解压 将下载的Op ...
- POJ3308 Paratroopers(网络流)(最小割)
Paratroopers Time Limit: 1000MS Memory Limit: 655 ...
- 服务器启用 FTP
通常使用 vsftpd 作为FTP服务器. 安装 vsftpd: 1.以管理员(root)身份执行以下命令 yum install vsftpd 2.设置开机启动 vsftpd ftp 服务 chkc ...
- Linux 挂载新硬盘
Linux 的硬盘识别 在 /dev/ 下建立相应的设备文件.如 sda 表示第一块 SCSI 硬盘 hda 表示第一块 IDE 硬盘(即连接在第一个 IDE 接口的 Master 口上) scd0 ...
- 九度OJ 1010:计算A+B【字符串和数组】
/*======================================================================== 题目1010:A + B 时间限制:1 秒内存限制 ...
- sublime个人快捷键
ctrl+alt+f = 代码格式化(html,js) ctrl+d = 选中相同内容 alt+shift+w = 为内容添加新标签 ctrl+shift+a = 选择标签内的内容(再按一 ...
- 【Reporting Services 报表开发】— 级联式参数设置
级联式参数设置 再清楚的菜单,只要遇到选择项目一多的时候,难免会让人眼花缭乱,而找不到该选的选项.举例来说,像是零售业动辄万种商品品类,如果希望快速的选择到希望查看的产品品类时,就需要更有效率的搜索方 ...