leetcode 20题(简单):有效的括号(C语言)

20.有效的括号

解题思路一:

算法原理:

 

栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空;

遇到左括号入栈,遇到右括号和栈顶元素比较,若不匹配或栈空,直接返回0。

最后若栈非空,返回0,否则返回1。

 

算法图示:

 

         {   

             [

             ]

            (

              }

              {

              }

                  1                          2                         3                          4                         5                         6                           7

“{”先进栈,“[”进栈,随后“]”进栈,3与2匹配,则2,3出栈,匹配成功;随后“(”进栈,接着“)”,显然两括号无法匹配,匹配错误。

 

算法流程:

       利用数组,构建顺序栈。

       首先坚持字符串是否为空,若不为空则进行下一步,若为空则返回1;

       初始化顺序栈(top=-1),利用for循环,在内部利用switch进行进栈出栈的判断。“{ [ (”均进栈,“) ] }”出栈判断。

算法代码:

bool isValid(char * s){
    if(!s||s[0]=='\0')
        return true;
    char *stack=(char *)malloc(strlen(s));
    memset(stack,0,strlen(s));//初始化内存空间
    int top=-1;
    int i;
    for(i=0;s[i]!='\0';i++){
        switch(s[i]){
            case'(':
                stack[++top]=s[i];
                break;
            case'{':
                stack[++top]=s[i];
                break;
            case'[':
                stack[++top]=s[i];
                break;
            case')':
                if(top<0||stack[top--]!='(')
                    return false;
                 break;
            case'}':
                if(top<0||stack[top--]!='{')
                    return false;
                break;  
            case']':
                if(top<0||stack[top--]!='[')
                    return false;
                break;     
        }
    }
    if(top>=0)
            return false;
    return true;
}

 

算法评价:

时间复杂度:O(n),空间复杂度O(n)

      

同样的代码,多次提交,而执行时间却不一样。为什么呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值