XING_Gou 2022-10-13 15:51 采纳率: 0%
浏览 107

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

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

img


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
 
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;
}
  • 写回答

2条回答 默认 最新

  • 心随而动 人工智能领域新星创作者 2022-10-13 16:15
    关注

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 10月13日

悬赏问题

  • ¥100 文本摘要任务泄露问题
  • ¥15 js调用对象时报错,但是我看是有这个对象的,是不是调用方法不对
  • ¥15 希沃零度软件界面按钮传参分析
  • ¥15 可任意设置即使长度的倒计时器电路设计
  • ¥15 MusePose 部署安装问题,安装后无法启动
  • ¥15 Psexec获得电脑system权限该怎么操作,有偿
  • ¥50 python+flask实现流式api接口的问题
  • ¥20 关于#vue.js#的问题:后端返回的代码如下,根据后端返回的数据在页面上重新展示
  • ¥15 visual studio 社区版离线激活失败了
  • ¥15 Flask应用部署到阿里云服务器失败,无法访问网页,问题出在哪里?