题目描述:
给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:
1.任何左括号 ( 必须有相应的右括号 )。
2.任何右括号 ) 必须有相应的左括号 ( 。
3.左括号 ( 必须在对应的右括号之前 )。
4.* 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。
5.一个空字符串也被视为有效字符串。
示例:
示例 1:
输入: "()" 输出: True
示例 2:
输入: "(*)" 输出: True
示例 3:
输入: "(*))" 输出: True
代码:
class Solution {
public boolean checkValidString(String s) {
int m = 0;
int n = 0;
char[] str = s.toCharArray();
for(int i=0; i<str.length; i++) {
if (str[i] == '(') {
m++;
n++;
}
if (str[i] == ')') {
if (m>0) {
m--;
}
if (n>0) {
n--;
}
else {
return false;
}
}
if (str[i] == '*') {
if(m>0){
m--;
}
n++;
}
}
return m<=0 && 0<= n;
}
}
运行结果:
解题思路:
将字符串中出现“(” “)” “*” 的次数记录下来