BM77. 最长的括号子串
描述
示例1
输入:
"(()"
输出:
2
示例2
输入:
"(())"
输出:
4
C++ 解法, 执行用时: 2ms, 内存消耗: 504KB, 提交时间: 2021-06-12
static const auto io_sync_off = []() { // turn off sync std::ios::sync_with_stdio(false); // untie in/out streams std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * * @param s string字符串 * @return int整型 */ int longestValidParentheses(string s) { // write code here vector<int> idx_record( {-1} ); int len = s.length(), max = 0, tmp; for(int i=0; i<len; i++){ if(s[i] == '('){ idx_record.push_back(i); continue; } idx_record.pop_back(); if( idx_record.empty() ){ idx_record.push_back(i); continue; } if((tmp = i-idx_record.back()) > max) max = tmp; } return max; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 508KB, 提交时间: 2020-08-17
class Solution { public: /** * * @param s string字符串 * @return int整型 */ int longestValidParentheses(string s) { // write code here if(s.length() < 1){ return 0; } int L = s.length(); stack<int> stk; int maxL = 0; int last = -1; int i; for(i = 0; i<L; i++){ if(s.at(i) == '('){ stk.push(i); } else{ if(stk.empty()){ last = i; } else{ stk.pop(); if(stk.empty()){ maxL = max(maxL, i - last); } else{ maxL = max(maxL, i - stk.top()); } } } } return maxL; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 520KB, 提交时间: 2021-07-26
class Solution { public: /** * * @param s string字符串 * @return int整型 */ int longestValidParentheses(string s) { // write code here stack<int>stk; stk.push(-1); int res=0; int len=s.size(); for(int i=0;i<len;++i){ if(s[i]=='(') stk.push(i); else{ stk.pop(); if(!stk.empty()){ int temp=stk.top(); res=max(res,i-temp); }else{ stk.push(i); } } } return res; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 520KB, 提交时间: 2021-07-23
class Solution { public: /** * * @param s string字符串 * @return int整型 */ int longestValidParentheses(string s) { // write code here // stack<char>st; // st.push(-1); // int res = 0; stack<int> st; st.push(-1); int res = 0; for(int i = 0; i < s.size(); ++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; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 520KB, 提交时间: 2021-07-21
class Solution { public: /** * * @param s string字符串 * @return int整型 */ int longestValidParentheses(string s) { // write code here if(s.empty()) { return 0; } stack<int>st; st.push(-1); int res = 0; for(int i = 0; i < s.size(); i++) { if(s[i] == '(') { st.push(i); } else if(s[i] == ')') { st.pop(); if(st.empty()) { st.push(i); } else { res = max(res, i - st.top()); } } } return res; } };