有效的括号-C语言

  • Post author:
  • Post category:其他


给定一个只包括 ‘(‘,’)’,'{‘,’}’,'[‘,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

示例 1:

输入:s = “()”

输出:true

示例 2:

输入:s = “()[]{}”

输出:true

示例 3:

输入:s = “(]”

输出:false

示例 4:

输入:s = “([)]”

输出:false

示例 5:

输入:s = “{[]}”

输出:true

思路:申请一个strlen(s)长度的空间来当做栈,把左括号的都入栈,当遇到右括号出栈比较,判断栈是否为空,如果为空,返回false,如果不为空,比较是否是相适应的括号,如果不是返回false.直到比较完括号,判断栈是否为空,为空返回true,否则返回false.

ASCII 码表中小括号的相差1,花括号和方括号相差2

代码:

bool isValid(char * s){
    char *flat=(char *)malloc(strlen(s));
    int i=0,k=0;
        while(s[i])
        {
            if(s[i]=='(' || s[i]=='{' ||s[i]=='[')
            {
                flat[k++]=s[i];
            }else if(--k>=0)
            {
                if(!( s[i]-2==flat[k] || s[i]-1==flat[k]))
                {
                    free(flat);
                    return false;
                }   
            }else
            {
                free(flat);
                return false;
            }
            i++;
        }
  

    free(flat);
    if(k==0)
        return true;
    else
        return false;
}



版权声明:本文为weixin_46597732原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。