lichao_normal

导航

Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

For "(()", the longest valid parentheses substring is "()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

问题描述:给定一个只包含“(”和")"的串,找出一个最长的符合规则的子串。

对于“(()”,最长有效子串是“()”,所以长度是2

另一个例子,“)()())”,最长的有效字串是“()()”,所以长度是4.

 

  解题思路:

  (1)申请一个与输入串长度相同的整型数组,初始化值全部为-1,数组和输入串有一一对应的关系;

  (2)遍历输入串遇到“(”,就将其对应位置下标入栈;

  (3)遇到“)”,就将数组对应位置的值设置为0,弹出栈中第一个值,并将整型数组对应位置置0,这样保证对应的“()”,它们在整型数组中对应的值是0;

  (4)遍历结束,寻找0的连续个数最大值,就是要求的结果。

int longestValidParentheses(char* s) {
    int slen=strlen(s);
    if(slen<=1)return 0;
    
      int* index=(int*)malloc(sizeof(int)*slen);
      
      for(int i=0;i<slen;i++)index[i]=-1;
      
      int* stack=(int*)malloc(sizeof(int)*slen);
      int top=0;
      
      for(int i=0;i<slen;i++)
          if(s[i]=='(')stack[top++]=i;
          else{
              if(top!=0){
                  index[stack[top-1]]=0;
                  index[i]=0;
                  top--;
              }
          }
          
    int count=0;
    int newCount=0;
    for(int i=0;i<slen;i++)
        if(index[i]!=-1)newCount++;
        else{
            if(newCount>count){
                count=newCount;
                
            }
            newCount=0;
        }
    if(newCount>count)count=newCount;
    return count;
}
View Code

 

posted on 2016-12-09 10:51  lichao_normal  阅读(201)  评论(0编辑  收藏  举报