2017年9月16日 星期六

leetcode-678 Valid Parenthesis String

題意: 給定一含括弧字串,內另含*符號,可替代為  (  or  ) or 不替代

解題思路: 這題的基本概念,可先參見筆者對另一題的解法,總之就是要確保一路上左括弧都會大於等於右括弧,且最後左括弧數能等於右括弧數

可以用區間概念來處理,區間右端表示左括弧最多能比右括弧多幾個
                                                 左端表示左括弧最少能比右括弧多幾個(一定要大於等於零)

當遇到 ( 時, 區間左右端都加一
             ) 時, 區間左右端都減一
             *時, 區間左端減一,右端加一(因為可為左括弧或右括弧)
如此即可解

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;
    }
};

沒有留言:

張貼留言