leetcode - 678. 有效的括号字符串
题目
代码
#include <iostream>
#include <stack>
using namespace std;
bool checkValidString(string s) {
int n = s.size();
if(n == 0 || (n == 1 && s[0] == '*')){
return true;
}else if(n == 1 && s[0] != '*'){
return false;
}
stack<int> st;
stack<int> sx;
for(int i = 0; i < n; i++){
if(s[i] == '('){
st.push(i);
}else if(s[i] == ')'){
if(!st.empty()){
st.pop();
}else{
if(!sx.empty()){
sx.pop();
}else{
return false;
}
}
}else if(s[i] == '*'){
sx.push(i);
}
}
if(st.size() > sx.size()){
return false;
}
while(!st.empty() && !sx.empty()){
int t = st.top();
st.pop();
int x = sx.top();
sx.pop();
if(t > x){
return false;
}
}
return true;
}
int main(){
string s;
bool res;
cin>>s;
res = checkValidString(s);
if(res){
cout<<"true";
}else{
cout<<"false";
}
return 0;
}