[LeetCode] Regular Expression Matching

来源:互联网 发布:编程学什么语言好 编辑:程序博客网 时间:2024/04/28 22:33

'.' 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

很费时间的一道题。注意这里的*不是一般通配符里的*,而是表示的前一个字符可以重复0次到多次。*因此在这个题目里也不会以打头形式出现。

这题需要处理的不同情况非常的多。。。


public boolean isMatch(String s, String p) {if (p.length() == 0)return s.length() == 0;// strict matchif (p.length() == 1 || p.charAt(1) != '*') {// note '*' won't be a beginning characterif (s.length() < 1|| (p.charAt(0) != '.' && s.charAt(0) != p.charAt(0)))return false;elsereturn isMatch(s.substring(1), p.substring(1));}// need to match one character followed by a '*'else {// k must start from -1// otherwise, the check will fail if s is an empty stringfor (int k = -1; k < s.length()// empty string || match&& (k < 0 || p.charAt(0) == '.' || s.charAt(k) == p.charAt(0)); k++) {if (isMatch(s.substring(k + 1), p.substring(2)))return true;}return false;}}



原创粉丝点击