例: 文字列が")(((())))))("
の場合、答えは 8 になります。次のように実装します:(他の人から学ぶ)
int longestValidParentheses(string s) {
int len = s.length();
char* str = new char[len+1];
strcpy(str,s.c_str());
int maxlen=0;
stack<char*> stk;
char* cur = str;
while(*cur)
{
if(*cur=='(')
stk.push(cur);
else
{
if(!stk.empty() && *stk.top()=='(')
{
stk.pop();
maxlen = max(maxlen, cur-(stk.empty()?str-1:stk.top()));
}
else
stk.push(cur);
}
cur++;
}
return maxlen;
}
しかし、このコードの理由はわかりませんが、そうではありませchar* str = new char[len+1]
んchar* str = new char[len]
。理由を教えてもらえますか?を使用するchar* str = new char[len]
と、エラーが発生します。