标签:匹配 括号 -- 32 jilu 力扣 int vec leftstk
题目
题解
在第20题 力扣 题目20-- 有效的括号 我采用了栈的方法匹配
那么这题应该可以利用栈去匹配 但是这题并不是问的一共匹配了多少 而是连续最长匹配了多少
我们想一下 通过栈可以找到所有匹配的括号 那么剩下的不就是没有匹配的吗?
以()(()为例
先vector<int> vec(s.size(),1); 那么此时vec里面是{1,1,1,1,1}
让匹配到的括号位置为0 匹配了之后 {0,0,1,0,0}
那么此时我们以1分割开来 然后数0 0数量最多的那个就是答案
代码
1 #include<iostream> 2 #include<stack> 3 #include<string> 4 #include<vector> 5 using namespace std; 6 7 class Solution { 8 public: 9 int longestValidParentheses(string s) { 10 int num = 0; 11 stack<int> leftstk; 12 vector<int> vec(s.size(),1); 13 int jilu = 0; 14 int max = 0; 15 //匹配 16 for (int i = 0; i < s.size(); i++) { 17 //40是左括号 左括号的位置放进栈 18 if (s[i] ==40) { 19 leftstk.push(i); 20 } 21 else { 22 //如果为空 就是单右括号不匹配不用改变 23 if (leftstk.empty()) { 24 continue; 25 } 26 else { 27 //匹配成功 将匹配成功的两个括号位置的vector位置改变为0 28 vec[i] = 0; 29 vec[leftstk.top()] = 0; 30 //出栈 匹配下一个 31 leftstk.pop(); 32 } 33 } 34 } 35 //遍历vec 找到0最多的情况 36 for (int i = 0; i < vec.size(); i++) { 37 if (vec[i] == 0) { 38 jilu = jilu + 1; 39 } 40 else 41 { 42 jilu = 0; 43 } 44 if (max < jilu) { 45 max = jilu; 46 } 47 } 48 return max; 49 } 50 }; 51 52 int main() { 53 Solution sol; 54 string s = ")(()(()(((())(((((()()))((((()()(()()())())())()))()()()())(())()()(((()))))()((()))(((())()((()()())((())))(())))())((()())()()((()((())))))((()(((((()((()))(()()(())))((()))()))())"; 55 int num=sol.longestValidParentheses(s); 56 cout << num << endl; 57 }View Code
标签:匹配,括号,--,32,jilu,力扣,int,vec,leftstk 来源: https://www.cnblogs.com/zx469321142/p/16178383.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。