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

下题的程序流程题,怎么画,求帮忙,谢谢!

img


#include 
#include 
#include 
 
 
char Judge(char c)
{
    if(c == ')') return '(';
    if(c == ']') return '[';
    if(c == '}') return '{';
 
    return '0';
}
 
/**
 * @brief 
 * 
 * @param s 
 * @return true 
 * @return false 
 */
bool isValid(const char *s)
{
    int len = strlen(s);
 
    //奇数肯定不匹配
    if(len%2 !=0 || len <= 0)
        return false;
 
    //创建栈
    char *statck = (char *)malloc(sizeof(char) * len);
    int statckPos = -1; // 栈的初始位置
 
    while(*s!='\0'){
 
        char c = *s;
        if(c =='(' || c =='[' || c == '{'){
            // 入栈
            statck[++statckPos] = c;
 
        }
        else{
            // 栈开始就是右括号也是不匹配(可能是字符串开头就是右括号也可能是中间处理遇到)
            if(statckPos == -1)
                return false;
 
            char tmp = Judge(c);
            if(statck[statckPos] != tmp)
                return false;
 
            //匹配的话栈就后退
            statckPos--;
            
        }
 
        s++;
    }
 
    //走到这里判断完后看栈是否为空,如果为空就代表全部匹配
    if(statckPos == -1)
        return true;
 
    return false;
}
 
int main(void) 
{
    bool ret = false;
    const char *s = "()[]{}"; // 匹配
    // const char *s = "(]"; // 不匹配
    // const char *s = "([)]"; // 不匹配
    // const char *s = "{[]}"; // 匹配
 
    ret = isValid(s);
    printf("%s\n",ret?"匹配":"不匹配");
    return 0;
}

img