• 有效的括号(栈的高频面试题)


    一、题目描述

    题目连接:有效的括号

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

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。
    3. 每个右括号都有一个对应的相同类型的左括号。

    输出需求

    示例 1:

    输入:s = "()"
    输出:true
    

    示例 2:

    输入:s = "()[]{}"
    输出:true
    

    示例 3:

    输入:s = "(]"
    输出:false

     二、题目思路

    🍎  括号匹配是使用 解决的经典问题 ,其思路如下:

           遍历字符串,遇到左括号,将左括号与之对应的右括号入栈;将栈中的括号与右括号进行对比,一样就出栈。遍历完之后若栈为空,则字符有效, return ture .

     🍐  在解决一些问题时,我们首先要考虑这些问题的极端性

     🍉  首先分析不匹配的情况,一共有三种情况:

           1️⃣:左括号多余

     

         
            当遍历完字符串后栈不为空,则说明有多余的左括号,return flase.

       2️⃣: 右括号多余
     

        当遍历过程中遇到右括号时,栈为空,则说明右括号多余,return false.

     3️⃣: 括号没有多余,但是括号的类型没有对应上。
     

        当遍历过程中遇到右括号时,栈顶元素与之不对应,则说明括号的类型没有对应上,return false.
     

    三、问题实现

    1. // 用栈解决
    2. // 数组模拟栈
    3. bool isValid(char * s)
    4. {
    5. // 计算 原数组长度
    6. int len = strlen(s);
    7. // 先重新开辟一个动态数组来存储栈 (在堆上开辟)
    8. int* stack = (int*)malloc(sizeof(int)*len);
    9. // 记录插入栈中的数据个数
    10. int count = 0; // 此时count指向的是栈中有效数据的下一个位置 也就是栈顶指针
    11. // 开始遍历整个数据
    12. for(int i = 0; i < len; i++)
    13. {
    14. // 开始遍历 先遍历左括号在遍历右括号
    15. if(s[i]=='(')
    16. {
    17. stack[count++] = ')';
    18. }
    19. else if(s[i]=='[')
    20. {
    21. stack[count++] = ']';
    22. }
    23. else if(s[i]=='{')
    24. {
    25. stack[count++] = '}';
    26. }
    27. // count=0 表示 右括号多余
    28. // stack[count-1]=s[i] 表示 类型没对上
    29. else if(count==0||stack[count-1]!=s[i])
    30. {
    31. return false;
    32. }
    33. else
    34. {
    35. count--;
    36. }
    37. }
    38. // 当遍历完整个数组,栈理应为空,如果栈没空 表示左括号多余
    39. return count==0; //栈中无任何元素,说明全部匹配成功
    40. }

     

  • 相关阅读:
    亚马逊云科技打造SAP核心业务系统上云最佳实践,加快业务转型和价值实现
    单片机设计_室内环境智能监测系统(STM32 OLED ESP8266 DHT11 MQ-2 加湿器)
    API接口开发规范
    labview 串口通信 modbusRtu
    SVN相关-比较差异的时候哪边是最新的
    Docker网络模型(五)使用 overlay 网络
    微信小程序的分包加载
    【EDA365电子论坛】RISC-V 能否超越 x86、Arm,成为新一代计算机系统架构?
    FFplay文档解读-8-格式选项
    Spring Boot 实现跨域的 5 种方式,总有一种适合你,建议收藏
  • 原文地址:https://blog.csdn.net/weixin_45031801/article/details/132995830