免费网站推广咱们做,建设企业网站公司价格,北京房山网站建设产品更新培训,类似淘宝网 的淘宝客网站模板题目#xff1a; 思路#xff1a;
遍历括号.遇到右括号然后前一个是左括号 那就res2,然后重定位 i 的值 并且长度减少2;
但是问题在于无法判断最长的括号.只能得到string内的全部括号长度. 错误代码: 写过一题类似的,那题是找括号数.记得是使用的栈,但是死活写不出来.
看完…题目 思路
遍历括号.遇到右括号然后前一个是左括号 那就res2,然后重定位 i 的值 并且长度减少2;
但是问题在于无法判断最长的括号.只能得到string内的全部括号长度. 错误代码: 写过一题类似的,那题是找括号数.记得是使用的栈,但是死活写不出来.
看完答案觉得答案有一些反常. 代码是
//codeclass Solution {
public:int longestValidParentheses(string s) {int n s.length();int res 0;stackint st; // 栈用来记录左括号的位置st.push(-1); // 将-1压入栈中作为一个“虚拟的”左括号位置for (int i 0; i n; i) {if (s[i] () { // 如果是左括号将其位置压入栈中st.push(i);} else { // 如果是右括号st.pop(); // 弹出栈顶的左括号位置if (st.empty()) { // 如果栈为空说明当前的右括号没有匹配的左括号st.push(i); // 将当前的右括号位置压入栈中作为下一个“虚拟的”左括号位置} else { // 如果栈不为空计算当前的括号子串长度res max(res, i - st.top());}}}return res; // 返回最长有效括号长度}
};
在代码中当判断到右括号时 栈st 先 pop 然后再进行判断. 有点神奇..