bool isValid(char* s)
{
       ST st;
       StackInit(&st);
       while (*s)
       {
              if (*s == '(' || *s == '[' || *s == '{')//遇到左括号就入栈
              {
                      STPush(&st,*s);
                      s++;
              }
              else//遇到右括号,出栈进行匹配
              {
                      if (STEmpty(&st))//如果目前栈为空那么代表右括号数目比左括号多
                      {
                             StackDestroy(&st);
                             return false;
                      }
                      char top = STTop(&st);
                      STPop(&st);
                      if( (*s == ')' && top != '(')|| (*s == ']' && top != '[')|| (*s  == '}' && top != '{'))//匹配就继续走,如果一个不匹配就直接false
                      {
                             StackDestroy(&st);
                             return false;
                      }
                      else
                      {
                             s++;
                      }
              }
       }
       bool ret = STEmpty(&st);//如果栈为空才是匹配的,栈不为空那证明左括号多于右括号
       StackDestroy(&st);
       return ret;
}

代码中遇到的函数具体实现请看作者之前的文章[数据结构]栈详解有讲过

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐