解題思路: 這題的基本概念,可先參見筆者對另一題的解法,總之就是要確保一路上左括弧都會大於等於右括弧,且最後左括弧數能等於右括弧數
可以用區間概念來處理,區間右端表示左括弧最多能比右括弧多幾個
左端表示左括弧最少能比右括弧多幾個(一定要大於等於零)
當遇到 ( 時, 區間左右端都加一
) 時, 區間左右端都減一
*時, 區間左端減一,右端加一(因為可為左括弧或右括弧)
如此即可解
c++ code如下:
class Solution { public: bool checkValidString(string s) { int top=0; int bottom=0; int len=s.length(); for(int i=0;i<len;i++) { if(s[i]=='(') { top++; bottom++; } else if(s[i]==')') { top--; bottom--; } else { top++; bottom--; } if(top<0) return false; if(bottom<0) bottom=0; } if(bottom==0) return true; return false; } };