Leetcode 之Longest Valid Parentheses(39)_编程题

有一定的难度。用堆栈记录下所有左符的位置,用变量记录下孤立右符的位置。

Leetcode 之Longest Valid Parentheses(39)_i++_02Leetcode 之Longest Valid Parentheses(39)_堆栈_03
int longestValidParentheses(const string& s)
      {
          stack<int>lefts;//将左符对应的位置保留
          int last;//记录孤立的右符位置
          int max_len = 0;//记录当前最长的有效长度
          for (int i = 0; i < s.size(); i++)
          {
              if (s[i] == '(')
                  lefts.push(i);
              else
              {
                  if (lefts.empty())
                  {
                      last = i;
                  }
                  else
                  {
                      lefts.pop();
                      if (lefts.empty())
                          max_len = max(max_len, i - last);
                      else
                          max_len = max(max_len, i - lefts.top());
                  }
              }
          }

          return max_len;
      }
View Code