有效的括号(C, Python)

  • 1. 题目描述
  • 2. 题目分析
  • 3. C语言实现
    • 4. Python语言实现

1. 题目描述

难度:简单

2. 题目分析

这道题咋一看挺简单的,但是请注意观察这两个示例:

  • 示例2, 示例4
    刚开始的时候我想利用双指针法来对字符串进行判断,一个首指针,一个尾指针,如果字符串首尾相同,那么就输出true。但是示例2不符合该想法。
    然后想着统计正括号和反括号的数量是否一致并且反括号要在正括号的右边,但是示例4满足该算法,但是示例4是错误的。

该题目最佳的算法就是利用栈的数据结构来进行判断:

  • 栈(C语言)
    依次将字符放入栈中,并判断放入的字符是否和栈首的字符构成一对,如果是一对,将栈首的字符弹出。如果不是一对,将该字符压入栈中。最终判断栈中是否还有元素,如果有,那么就是输出false,如果栈是空的,就输出为true。时间复杂度为O(n)。
  • 删除法(Python)
    如果字符串中有成对的括号比如"()", “{}”, “[]”,将该对括号删除,然后继续检查剩下的字符串,如果最终字符串为空,那么就输出true,否则输出false。

3. C语言实现

代码如下:

// 返回括号对应的值
int returnValue(char s){char type[] = {'(', ')', '{', '}', '[', ']'};int flag[] = {1, -1, 10, -10, 100, -100};for(int i = 0; i < 6; i++){if(s == type[i]) return flag[i];}return 0;
}// 模拟栈的方法
bool isValid(char * s){// index指向栈首int index = 0;int value;int len = strlen(s);// 如果空字符串,返回1if(len == 0) return 1;// 如果字符串长度为奇数,返回0if(len % 2 != 0) return 0;// 申请栈的空间int* stack = (int *)malloc(sizeof(int)*len);// 赋值栈尾元素stack[0] = returnValue(s[0]);for(int i = 1; i < len; i++){value = returnValue(s[i]);// 如果栈为空,将值放入栈if(index==-1){index++;stack[index] = value;}// 如果栈不为空进行判断else{// 如果遍历的元素的值与栈首的值相加为0,将栈首元素弹出if(value + stack[index] == 0)index--;// 否则,将遍历的元素的值压如栈中else{index++;stack[index] = value;}}}free(stack);return index == -1? 1:0;
}

输出结果为:

4. Python语言实现

代码如下:

class Solution:def isValid(self, s):while '{}' in s or '()' in s or '[]' in s:s = s.replace('{}', '')s = s.replace('[]', '')s = s.replace('()', '')return s == ''

输出结果为:

LeetCode--20. 有效的括号(栈,删除法)相关推荐

  1. 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

    题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...

  2. LeetCode 20. 有效的括号 golang(三)

    20. 有效的括号 这个题做了三次,前两次的解法现在觉得是算不得正确的. 看的多写得少 做的多总结少 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有 ...

  3. LeetCode 20. 有效的括号(栈)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭 ...

  4. 【Java】LeetCode 20 有效的括号 (运用数据结构:栈 解题)

    题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 解题 ...

  5. LeetCode 20. 有效的括号(Valid Parentheses)

    栈思想 关于有效括号表达式的一个有趣属性是有效表达式的子表达式也应该是有效表达式. 整个表达式是有效的,而它的子表达式本身也是有效的.这为问题提供了一种递归结构.(栈思想) 从整体表达式中一次删除一个 ...

  6. leetcode 20. 有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  7. LeetCode 20 有效的括号

    https://leetcode-cn.com/problems/valid-parentheses/ 解决方案 class Solution {public boolean isValid(Stri ...

  8. Suzy找到实习了吗Day 11 |栈与队列中途 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

    Day 11 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 20. 有效的括号 注意栈不是一个数据结构,需要自己用list实现栈的逻辑 class Solu ...

  9. 算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    目录 LeetCode232.用栈实现队列 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode225. 用队列实现栈 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 ...

  10. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

最新文章

  1. 下一个十年的C位:物联网产业全景解析
  2. 老王亲述:我的运维心路历程
  3. 算法提高课-图论-单源最短路的建图方式-AcWing 920. 最优乘车:bfs求最短路、建图
  4. 苹果cms的php.ini,苹果cms安装及配置详细教程
  5. 白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库
  6. 企业存储管理的另一种可能 群晖如何成为NAS代名词?
  7. DL之CNN:计算机视觉之卷积神经网络经典算法简介、重要进展、改进技巧之详细攻略(建议收藏)
  8. VTK:可视化之TransformActorCollection
  9. linux framebuffer 例子
  10. 由PPPOE看Linux网络协议栈的实现
  11. 本周Whale Alert监测到7.9万枚BTC在匿名地址间转账
  12. 剑指offer面试题[8]-旋转数组的最小数字
  13. 今日头条android+x86,GitHub - teajoyus/TouTiao: 今日头条 For Android
  14. 经典vim插件功能说明、安装方法和使用方法介绍
  15. DEV C++设置背景音乐
  16. Hammer.js 进行图片缩放
  17. 【车载以太网】【SOMEIP】Wireshark测试someip
  18. Node 插件 爬取王者荣耀官网英雄信息,并生成数据库
  19. 用于调用的参数太少/写入位置时发生冲突/检测到无效的异常处理程序例程
  20. @Inherited

热门文章

  1. Centos7下Confluence5.6.6安装
  2. fast-planner 安装
  3. mqtt服务器apollo的搭建和测试工具paho的使用
  4. Object Detection API 相关
  5. Delphi常用系统函数总结
  6. foreach和volist的区别
  7. 【转载】特殊宏://{{AFX_MSG、//{{AFX_VIRTUAL、//{{AFX_MSG_MAP、//{{AFX_DATA_INIT
  8. HappyLeetcode37:Add Binary
  9. IIS+ASP部署相关
  10. 在线验证json字符串