class Solution { public: int longestValidParentheses(string s) { int len=s.size(); vector<int> max_sub(len+1,0); int res=0; for(int i=1;i<=len;i++) { if(s[i-1]==')') { if(i<=1) continue; else if(s[i-2]=='(') max_sub[i]=max_sub[i-2]+2; else if(s[i-2]==')'&&i - 2 - max_sub[i - 1]>=0&&s[i-2-max_sub[i-1]]=='(') max_sub[i]=max_sub[i-2-max_sub[i-1]]+max_sub[i-1]+2; if(max_sub[i]>res) res=max_sub[i]; } cout << max_sub[i]; } return res; } };
分析:
思想二的实现,细节还是要注意的啊。比如
else if(s[i-2]==')'&&i - 2 - max_sub[i - 1]>=0&&s[i-2-max_sub[i-1]]=='(')
i - 2 - max_sub[i - 1]>=0这个判断我就卡了好久。