博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Regular Expression Matching
阅读量:6234 次
发布时间:2019-06-21

本文共 1582 字,大约阅读时间需要 5 分钟。

题目

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") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("aab", "c*a*b") → true

方法

使用递归的思想,分为两种情况:
1. p[i + 1] != '*', 返回 p[i] == s[j] && (s(j + 1), p(i + 1)):递归求解
2. p[i + 1] == '*',分p[i] != s[j], 递归求解(s(j), p(i + 2))
     p[i] == s[j] 递归求解(s(j), p(i + 2))以及 (s(j + 1) ,p (i + 2))
private boolean getMatch(String s, int lenS, int curS, String p, int lenP, int curP) {				if (curP == lenP) {			return curS == lenS;		}		if (curP + 1 == lenP || p.charAt(curP + 1) != '*') {			if (curS == lenS) {				return false;			}			return (p.charAt(curP) == s.charAt(curS) || p.charAt(curP) == '.') && getMatch(s, lenS, curS + 1, p, lenP, curP + 1);		}				while (curS < lenS && (s.charAt(curS) == p.charAt(curP) || p.charAt(curP) == '.')) {			if (getMatch(s, lenS, curS, p, lenP, curP + 2)) {				return true;			}			curS++;		}		return getMatch(s, lenS, curS, p, lenP, curP + 2);	}    public boolean isMatch(String s, String p) {    	if ((s == null && p == null) || (s.length() == 0 && p.length() == 0)) {    		return true;    	}    	int lenS = s.length();    	int lenP = p.length();        return getMatch(s, lenS, 0, p, lenP, 0);    }

转载于:https://www.cnblogs.com/gavanwanggw/p/6746811.html

你可能感兴趣的文章
FreeRTOS系列第13篇---FreeRTOS内核控制
查看>>
python入门小记
查看>>
将逻辑卷降为物理分区
查看>>
CMake 入门实战【转】
查看>>
软硬件之共生之道——一千零一夜的启发
查看>>
redis 性能建议
查看>>
Android MaoZhuaWeiBo开发Service抓取个人信息-2
查看>>
Codefoces 436 B. Om Nom and Spiders
查看>>
流程控制------if else分支语句
查看>>
禁用Clusterware在系统启动后自己主动启动
查看>>
Storm编程入门API系列之Storm的Topology默认Workers、默认executors和默认tasks数目
查看>>
Json转java对象和List集合
查看>>
PHP操作MongoDB数据库具体样例介绍(增、删、改、查) (六)
查看>>
关于Unity中的模型描边与Shader切换(专题二)
查看>>
《淘宝技术这十年》读后感
查看>>
程序员经常加班的真正原因
查看>>
windows系统下如何正确安装Cygwin(图文详解)
查看>>
SpringBoot接口服务处理Whitelabel Error Page
查看>>
mysql创建唯一索引
查看>>
Vijos1935不可思议的清晨题解
查看>>