注意事项:*需要单独一个栈来标记,而且存入栈的元素为下标i
star不可以用一个整数来标记,原因在于:“****(((”,该字符串无效,会被判别为有效。*与(的相对位置很关键。
class Solution { public: bool checkValidString(string s) { int len = s.size(); stack<int> st,star; int star_num = 0; for(int i = 0 ;i < len ;i++){ char c = s[i]; if(c != ')'){ if(c != '*'){ st.push(i); }else{ star.push(i); } }else{ if(st.empty()){ if(star.empty()){ return false; }else{ star.pop(); } }else{ st.pop(); } } } while(!st.empty() && !star.empty()){ if(st.top() > star.top()){ return false; }; st.pop(); star.pop(); } return st.empty(); } };