'.' 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,否则返回falsepackage 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
最新推荐文章于 2019-11-23 22:06:18 发布