/** * ãå·¥ç¨ã: LeetCode å å: PACKAGE_NAME ç±»å: RegularExpressionMatching * ãä½è ã: liuyang * ãæ¶é´ã: 16/10/10 ä¸å3:44 * ãé¢ç®ã: Regular Expression Matching(æ£å表达å¼å¹é ) * ãå 容ã: * ãçæ¬ã: V1.0 * ãè¿è¡æ¶é´ã: * ãæ¶é´å¤æåº¦ã: * ã空é´å¤æåº¦ã: * ã夿³¨ã: * ãæè·¯ã: */ public class RegularExpressionMatching { public boolean isMatch(String s, String p) { if ((s == null || p == null)) { return false; } return matchCore(s.toCharArray(),0,p.toCharArray(),0); } public boolean matchCore(char[] str, int i, char[] pattern, int j) { //æææ§æ£éªï¼strå°å°¾ï¼patternå°å°¾ï¼å¹é æå if ((i == str.length) && (j == pattern.length)) { return true; } //patternå å°å°¾ï¼å¹é 失败 if ((i != str.length) && (j == pattern.length)) { return false; } //模å¼ç¬¬2个æ¯*ï¼ä¸å符串第1ä¸ªè·æ¨¡å¼ç¬¬1个å¹é ,å3ç§å¹é 模å¼ï¼å¦ä¸å¹é ï¼æ¨¡å¼åç§»2ä½ if (j + 1 < pattern.length && pattern[j + 1] == '*') { if ((i != str.length&&str[i] == pattern[j]) || (pattern[j] == '.' && i != str.length)) { return matchCore(str, i + 1, pattern, j + 2) //模å¼åç§»2ï¼è§ä¸ºx*å¹é 0个å符 || matchCore(str, i + 1, pattern, j) //è§ä¸ºæ¨¡å¼å¹é 1个å符 || matchCore(str, i, pattern, j + 2); //*å¹é 1个ï¼åå¹é strä¸çä¸ä¸ä¸ª } else { return matchCore(str, i, pattern, j + 2); } } //模å¼ç¬¬2ä¸ªä¸æ¯*ï¼ä¸å符串第1ä¸ªè·æ¨¡å¼ç¬¬1个å¹é ï¼åé½åç§»1ä½ï¼å¦åç´æ¥è¿åfalse if ((i != str.length && str[i] == pattern[j]) || (pattern[j] == '.' && i != str.length)) { return matchCore(str, i + 1, pattern, j + 1); } return false; } public static void main(String[] args) { RegularExpressionMatching t = new RegularExpressionMatching(); System.out.println(); } }