10. Regular Expression Matching

来源:互联网 发布:数控冲床编程教程 编辑:程序博客网 时间:2024/06/18 17:14

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


public class Solution {    public boolean isMatch(String s, String p) {if (s == null || p == null) {return false;}boolean[][] dp = new boolean[s.length() + 1][p.length() + 1];dp[0][0] = true;for (int i = 0; i < p.length(); i++) {if (p.charAt(i) == '*' && dp[0][i - 1]) {dp[0][i + 1] = true;}}    for (int i = 0; i < s.length(); i++) {for (int j = 0; j < p.length(); j++) {if (p.charAt(j) == '.') {dp[i + 1][j + 1] = dp[i][j];}if (p.charAt(j) == s.charAt(i)) {dp[i + 1][j + 1] = dp[i][j];}if (p.charAt(j) == '*') {if (p.charAt(j - 1) != s.charAt(i) && p.charAt(j - 1) != '.') { //match 0个的case,前一个字符跟当前不等dp[i + 1][j + 1] = dp[i + 1][j - 1];} else {dp[i + 1][j + 1] = (dp[i + 1][j] || dp[i][j + 1] || dp[i + 1][j - 1]); //match 多个的情况}}}}return dp[s.length()][p.length()];    }}


0 0
原创粉丝点击