0

例: 文字列が")(((())))))("の場合、答えは 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]と、エラーが発生します。

4

4 に答える 4

0
int longestValidParentheses(string s){
    int pos = 0;
    int maxlen = 0;
    while(pos != -1){
           pos = substr(pos).find("(");
           if(str.substr(pos).find(")") == -1) pos = -1;
           maxlen += 2;
           pos++;
    }
    return maxlen;
}

C++ を使用している場合は、与えられたツールを使用することもできます。

于 2013-09-12T21:58:23.870 に答える