标签:678 charAt int 括号 字符串 true Leetcode size
有效的括号字符串
给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:
- 任何左括号 ( 必须有相应的右括号 )。
- 任何右括号 ) 必须有相应的左括号 ( 。
- 左括号 ( 必须在对应的右括号之前 )。
- * 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。
- 一个空字符串也被视为有效字符串。
示例 1:
输入: "()"
输出: True
示例 2:
输入: "(*)"
输出: True
示例 3:
输入: "(*))"
输出: True
注意:
- 字符串大小将在 [1,100] 范围内。
思路
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 }
标签:678,charAt,int,括号,字符串,true,Leetcode,size 来源: https://www.cnblogs.com/kexinxin/p/10400332.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。