题目
题解思路(栈)
始终保持栈底元素为当前已经遍历过的元素中“最后一个没有被匹配的右括号的下标”,这样的做法主要是考虑了边界条件的处理,栈里其他元素维护左括号的下标:
- 若遇到左括号,将其下标入栈;
- 若遇到右括号,则将栈顶下标元素弹出,视为匹配了当前的右括号;
- 如果第2步之后栈为空,说明当前的右括号在栈内没有被匹配,将其下标放入栈中;若不为空,说明匹配了一对“()”,更新ans,继续往后遍历;
题解代码
class Solution {
public:
int longestValidParentheses(string s) {
int ans=0;
stack<int> stk; //用来存放下标的栈
stk.push(-1); //防止第一个为右括号时,栈内无元素可供弹出
for(int i=0;i<s.size();i++){
if(s[i]=='(') //若为左括号,下标入栈
stk.push(i);
else{ //否则,弹出栈顶,若栈空,则该子串已结束,将下标入栈;
stk.pop(); //若栈不空,则更新子串长度,继续遍历
if(stk.empty())
stk.push(i);
else
ans=ans>(i-stk.top())?ans:i-stk.top();
}
}
return ans;
}
};
时间复杂度:O(n)
空间复杂度:O(n)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。