有一定的难度。用堆栈记录下所有左符的位置,用变量记录下孤立右符的位置。
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; }