编程实现:考虑算法的空间复杂度和时间复杂度java
题目:[Regular Expression Matching]算法
假设: 输入字符串为:s, 长度为:slen, s的第i个字符到最后一个字符为: s[i:];,s的第i个字符为:s[i]; 匹配模式为:p,长度为:plen, p第j个字符到最后一个字符为p[j:];p的第j个字符为:p[j]; s[i:] 和 p[j:] 匹配结果为: r[i][j]express
极限状况编程
临界状况数组
假设:code
由于数组索引是从0开始算第一个字符的,因此 i=0而且j=0,则r[0][0] 为最终的匹配结果索引
class Solution { public boolean isMatch(String text, String pattern) { boolean[][] dp = new boolean[text.length() + 1][pattern.length() + 1]; dp[text.length()][pattern.length()] = true; for (int i = text.length(); i >= 0; i--){ for (int j = pattern.length() - 1; j >= 0; j--){ boolean first_match = (i < text.length() && (pattern.charAt(j) == text.charAt(i) || pattern.charAt(j) == '.')); if (j + 1 < pattern.length() && pattern.charAt(j+1) == '*'){ dp[i][j] = dp[i][j+2] || first_match && dp[i+1][j]; } else { dp[i][j] = first_match && dp[i+1][j+1]; } } } return dp[0][0]; } }