'.' 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
分析可知:字符串s如果能在p中找到则返回true,否则返回false
package leetcode;
/**
* 要知道
* .只能匹配一个字符
* .*能匹配所有的字符串,但是当.*a 时 .和*只能默认是匹配一个字符
* @author Mouse
*
*/
public class Solution {
public static boolean isMatch(String s, String p) {
// s="aaa",p="" 或s="",p=""
if (p.length() == 0)
return s.length() == 0;
// s="a",p="a" 或 s="a",p="."
if (p.length() == 1)
return (s.length() == 1)
&& (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.');
if (p.charAt(1) != '*') {// 下一个不是*
if (s.length() == 0) {// s="",p=".a"
return false;
} else {// s="a",p="a" 或s="a",p="."
// s="aaa",p=".ab"
return (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.')
&& isMatch(s.substring(1), p.substring(1));
}
} else {// 下一个是*
while (s.length() > 0
&& (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.')) {
if (isMatch(s, p.substring(2)))
return true;
s = s.substring(1);
}
return isMatch(s, p.substring(2));
}
}
public static void main(String[] args) {
boolean a = isMatch("aaaa", ".*a");
System.out.println(a);
}
}
Regular Expression Matching
最新推荐文章于 2023-08-21 17:47:30 发布
本文介绍了一种实现正则表达式匹配的算法,重点解析了如何处理特殊字符‘.’和‘*’,并提供了详细的Java代码实现。通过递归方式处理不同情况,确保输入字符串完全匹配。
1552

被折叠的 条评论
为什么被折叠?



