在记事本中写算法题和在纸上写其实感觉差不多,反正是不能进行调试。想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写的代码对应的反汇编代码,也就是要深入了解编译器对高级语言的处理。什么时候能达到这样的境界呢?

LeetCode 题库的第 20 题——有效的括号

  我做题的习惯跟考试的习惯差不多,先找会做的,然后再慢慢啃不会的。本着一个原则,不用编译器,不去找答案,不会说明基础不牢固,继续补基础。

  题目我截图过来。

  上面的图是题目和给出的示例,示例是用来补充题目的,看着示例就知道什么时候应该返回 true ,什么时候返回 false 了。

解题思路

  LeetCode 都会给出每个题的函数定义,比如这个题的定义如下:

 bool isValid(char* s) {
}

  我选择的是 C 语言来答题。

  这个题中告诉我们:

  1、正确的括号包括 括弧、方括号 和 花括号;

  2、括号需要 成对 出现;

  3、函数传递过来的是字符串。

  那么,我的思路是:

  1、获得字符串的长度,用来 申请一块 堆空间 和 遍历括号;

  2、申请一块同样大小的 堆内存空间 做数组,用来模拟 堆栈 数据结构;

  3、用一个变量来记录栈顶的位置,其实就是数组当前的下标;

  4、然后遍历括号,如果是 ( [ { ,那么就进入 堆栈,并修改栈顶的位置;

  5、如果是 ) ] } 那么就去和当前数组位置的前一个值进行比较,如果能够闭合,那么就让前一个出栈,并且修改栈顶的位置;

  6、如果无法闭合,那么就返回假;

  7、循环完成后,如果 堆栈 为空,说明括号都可以闭合,就返回 1,C 语言中 非0 为真;

  8、如果 堆栈 不为空,说明有尚未闭合的括号,就返回0, C 语言中 0 为假。

解题答案

  这个题就是 数据结构 中堆栈的应用,还是比较简单的。完整代码如下:

 bool isValid(char* s) {
int len = strlen(s);
int i;
int pos = ; char *pArr = (char*)malloc(len * sizeof(char)); for ( i = ; i < len; i ++ ) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
pArr[pos ++] = s[i];
}
if (s[i] == ')') {
if ( pArr[pos - ] != '(' ) {
return ;
} else {
pos--;
}
} else if (s[i] == '}') {
if ( pArr[pos - ] != '{' ) {
return ;
} else {
pos--;
}
} else if (s[i] == ']') {
if ( pArr[pos - ] != '[' ) {
return ;
} else {
pos--;
}
}
} if ( pos != ) {
return ;
} return ;
}

  代码写的好不好就不管了,很多题都是 主调函数 释放空间,所以答题时,没有将 堆空间 释放掉,同样的 申请堆空间后,也没有判断内存是否申请成功。有很多地方写的不严谨,以后改正。


我的微信公众号:“码农UP2U”

LeetCode20——有效的括号的更多相关文章

  1. [Swift]LeetCode20. 有效的括号 | Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  2. leetcode20:有效的括号

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

  3. LeetCode20.有效的括号 JavaScript

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

  4. <每日 1 OJ> -LeetCode20. 有效的括号

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

  5. 面试之leetcode20堆栈-字符串括号匹配,队列实现栈

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

  6. leetcode.字符串.696计数二进制子串-java

    1. 具体题目 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的.重复出现的子串要计算它们出现的次数. 示例 1 : 输入: ...

  7. LeetCode通关:栈和队列六连,匹配问题有绝招

    刷题路线参考: https://github.com/chefyuan/algorithm-base https://github.com/youngyangyang04/leetcode-maste ...

  8. 十 用栈解决LeetCode20题括号的匹配

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiIAAACWCAYAAADjcONgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw

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

    20. 有效的括号 20. Valid Parentheses 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须 ...

随机推荐

  1. 世界GDP数据可视化

    各国GDP数据可视化 数据来自世界银行 导入资源包,如下: Pandas, numpy, seaborn 和 matplotlib import pandas as pd import numpy a ...

  2. Linux安装最新版Node.js

    由于直接yum安装的nodejs版本太低,所以本篇文章向大家介绍在 Linux 上安装 Node.js 最新版的方法. 安装环境 本机系统:CentOS Linux release 7.5 Node. ...

  3. python免密远程执行shell

    使用paramiko库:https://github.com/paramiko/paramiko 简单封装SSH类 import paramiko class SSH: def __init__(se ...

  4. python基础(2):python的安装、第一个python程序

    1. 第一个python程序 1.1 python的安装 自己百度,这是自学最基本的,安装一路确定即可,记得path下打钩. 1.2 python的编写 python程序有两种编写方式: 1.进入cm ...

  5. RandomAccessFile实现简易记事本工具操作

    package seday03; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Scann ...

  6. File文件的创建,删除 createNewFile() delete()

    package seday03; import java.io.File;import java.io.IOException; /*** 使用File新建一个test1.txt文件* @author ...

  7. C# Spire简单实现导出word(去水印)

    今天老姐打电话,说:下个月一号要换到其他岗位上,到时需要对word操作,小弟我随口答应,这个简单,我给你开发一款小程序,你直接在我程序上录入一些数据,我给你导出到word中. 利用中午空闲时间,百度了 ...

  8. Netty高性能组件——FastThreadLocal源码解析(细微处见真章)

    1. 前言 netty自行封装了FastThreadLocal以替换jdk提供的ThreadLocal,结合封装的FastThreadLocalThread,在多线程环境下的变量提高了ThreadLo ...

  9. [转]Eclipse插件开发之基础篇(4) OSGi框架

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html 1. 什么是OSGi框架 OSGi(O ...

  10. Linux--NIS

    一. 环境准备 操作系统:CentOS7.6 服务端安装如下软件: 软件名称 功能 ypserv NIS Server端的服务进程 rpcbind 提供RPC服务 客户端安装如下软件: 软件名称 功能 ...