1、时间复杂度(O(n^2)),思想,暴力查找
class Solution {
public:
int longestValidParentheses(string s) {
int maxLen=0;
for(int index=0;index< s.size();++index){
vector<char> vec_ch ;
int countValid = 0;
int maxValid = 0;
int nextSite=index;
for(int i=index;i<s.length();++i){
if(vec_ch.empty()) vec_ch.push_back(s.at(i));
else
if((vec_ch.back()=='{'&&s.at(i)=='}')||(vec_ch.back()=='['&&s.at(i)==']')||(vec_ch.back()=='('&&s.at(i)==')')){
if(nextSite>0) nextSite = -nextSite;
countValid+=2;
vec_ch.pop_back();
}else vec_ch.push_back(s.at(i));
if(vec_ch.back()=='}'||vec_ch.back()==']'||vec_ch.back()==')') {
vec_ch.pop_back();
break;
}
if(vec_ch.empty()){
maxValid+=countValid;
countValid=0;
}
if(nextSite>=0) nextSite=i;
}
if(maxValid>0){
index+=maxValid-2;
if(maxLen < maxValid)maxLen = maxValid;
}else {
if(nextSite<0)nextSite=-nextSite;
nextSite-=countValid;
nextSite-=index;
if(nextSite>0)index+=nextSite-1;
}
}
return maxLen;
}
};
2、时间复杂度(O(n)) ,思想,动态规划
class Solution {
public:
int longestValidParentheses(string s) {
int maxLen=0;
vector<int> vec_ch;
for(int i=0;i<s.length();++i){
if(vec_ch.empty()) vec_ch.push_back(s.at(i));
else
if(s.at(i)==')'){
int count =0;
if(vec_ch.back()!='('){
count += vec_ch.back();
vec_ch.pop_back();
}
if(!vec_ch.empty()){
count -= 2;
vec_ch.pop_back();
while(!vec_ch.empty()&&vec_ch.back()!='('){
count += vec_ch.back();
vec_ch.pop_back();
}
vec_ch.push_back(count);
if(maxLen>count)maxLen = count;
}
}else vec_ch.push_back(s.at(i));
if(vec_ch.back()==')') vec_ch.pop_back();
}
return -maxLen;
}
};
3、时间复杂度(O(n)),思想,动态规划
class Solution {
public:
int longestValidParentheses(string s) {
int maxLen=0;
vector<int> vec_ch;
vec_ch.push_back(-1);
for(int i=0;i<s.length();++i)
if(s.at(i)=='(')vec_ch.push_back(i);
else{
vec_ch.pop_back();
if(vec_ch.empty()) vec_ch.push_back(i);
else maxLen = maxLen > i-vec_ch.back() ? maxLen :i-vec_ch.back();
}
return maxLen;
}
};