編程實現:考慮算法的空間複雜度和時間複雜度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]; } }