leetcode 32 -- Longest Valid Parentheses
来源:互联网 发布:mac 批量保存网页图片 编辑:程序博客网 时间:2024/04/20 10:34
Longest Valid Parentheses
题目:
Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
For “(()”, the longest valid parentheses substring is “()”, which has length = 2.
Another example is “)()())”, where the longest valid parentheses substring is “()()”, which has length = 4.
题意:
给定一个字符串,找出其中满足括号匹配的最长字串的长度。
思路:
1.类似暴力求解,对每个子串进行验证,记录其括号匹配的长度,括号匹配原则,任意时刻,左括号个数一定大于右括号个数,且起始不能为右括号。时间复杂度O(n^2),超时。
2.新建一个数组(长度和s相同)作为辅助记录字符串s的括号匹配过程,用栈来帮我们测试是否满足括号匹配,有满足匹配则把对应下标置为1,不满足为0,最后遍历辅助数组,最长连续为1的长度就是我们所需要的结果,时间复杂度为O(n),AC
代码:
思路1
int longestValidParentheses(char* s) { char *p = s; char *q; int ret = 0; int left; int right; while(*p != '\0'){ //首字符不能为右括号 if(*p == ')'){ ++p; continue; }else if(*p == '('){ left = 1; right = 0; q = p+1; while(*q != '\0'){ //printf("s:%s\n", q); //sleep(1); if(*q == '('){ left++; }else if(*q == ')'){ right++; } //满足匹配更新,不满足跳出循环 if(right == left){ if(right+left > ret){ ret = right+left; //printf("ret:%d\n", ret); } }else if(right > left){ p = q; ++q; break; } ++q; } ++p; } } return ret;}
手动测试过正确,但是leetcode上面显示超时
思路2
class Solution {public: int longestValidParentheses(string s) { stack<int>sk; vector<int>ivec(s.length()); //初始化 for(int &i : ivec){ i = 0; } for(int i = 0; i < s.length(); ++i){ //注意栈保存的是对应字符的下标 if(s[i] == '('){ sk.push(i); }else if(s[i] == ')' && !sk.empty()){ //当为')'时,栈若不为空,则里面一定为'(',满足匹配,标记为1 ivec[i] = 1; ivec[sk.top()] = 1; sk.pop(); } } int ret= 0; int tmp = 0; //找最长连续为1的 for(const int &i : ivec){ if(i == 1){ tmp++; }else{ tmp = 0; } if(ret < tmp){ ret = tmp; } } return ret; }};
1 0
- LeetCode(32)Longest Valid Parentheses
- [Leetcode] #32 Longest Valid Parentheses
- [Leetcode] 32 - Longest Valid Parentheses
- LeetCode 32 Longest Valid Parentheses
- Leetcode 32 Longest Valid Parentheses
- leetcode 32 -- Longest Valid Parentheses
- LeetCode---(32)Longest Valid Parentheses
- leetcode 32 : Longest Valid Parentheses
- leetcode 32: Longest Valid Parentheses
- [leetcode 32]Longest Valid Parentheses
- LeetCode-32 Longest Valid Parentheses
- Leetcode #32 Longest Valid Parentheses
- Leetcode#32||Longest Valid Parentheses
- leetcode-32 Longest Valid Parentheses
- leetcode 32:Longest Valid Parentheses
- LeetCode 32: Longest Valid Parentheses
- Leetcode 32 - Longest Valid Parentheses
- LeetCode(32)-Longest Valid Parentheses
- Android中使用setBackgroundDrawable错误提示:The method setBackgroundDrawable(Drawable) from the type View is
- ubuntu下python+django开发环境搭建
- android4.2 增添永不休眠选项
- VMware 11安装Mac OS X 10.10
- Codeforces Round #307 (Div. 2)E. GukiZ and GukiZiana(分块)
- leetcode 32 -- Longest Valid Parentheses
- EBS并发请求产生的log和out文件定位及清理
- android源码模块编译出现的问题
- Openstack Nova Security Group——安全组之架构篇
- bash使用小技巧
- 【网络赚钱】这是一款神奇的软件-安装无需注册就能赚钱-提现秒到账
- excel数据导入到mysql的问题
- “贩卖儿童者,一律死刑!”可乎?
- 快速简单理解i2c标准协议