給定一個只包含三種字符的字符串:( ,) 和 *,寫一個函數來檢驗這個字符串是否爲有效字符串。有效字符串具備以下規則: 函數
示例 1: spa
輸入: "()" code
輸出: True blog
示例 2: 字符串
輸入: "(*)" it
輸出: True io
示例 3: class
輸入: "(*))" im
輸出: True img
注意:
1 class Solution { 2 public boolean checkValidString(String s) { 3 int n = s.length(); 4 if (n == 0) return true; 5 boolean[][] dp = new boolean[n][n]; 6 7 for (int i = 0; i < n; i++) { 8 if (s.charAt(i) == '*') dp[i][i] = true; 9 if (i < n-1 && 10 (s.charAt(i) == '(' || s.charAt(i) == '*') && 11 (s.charAt(i+1) == ')' || s.charAt(i+1) == '*')) { 12 dp[i][i+1] = true; 13 } 14 } 15 16 for (int size = 2; size < n; size++) { 17 for (int i = 0; i + size < n; i++) { 18 if (s.charAt(i) == '*' && dp[i+1][i+size] == true) { 19 dp[i][i+size] = true; 20 } else if (s.charAt(i) == '(' || s.charAt(i) == '*') { 21 for (int k = i+1; k <= i+size; k++) { 22 if ((s.charAt(k) == ')' || s.charAt(k) == '*') && 23 (k == i+1 || dp[i+1][k-1]) && 24 (k == i+size || dp[k+1][i+size])) { 25 dp[i][i+size] = true; 26 } 27 } 28 } 29 } 30 } 31 return dp[0][n-1]; 32 } 33 }