leecode经典题目:判断括号是否是闭合的

'{[()]}' ==>true

'{[(' ==>false

'{[(})]' ==>true

'()'  ==>true

这个是经典的栈结构的题目  先进后出或者后进先出

解题思路就是:循环遍历给出的字符串,如果是左边,如左小括号,左花括号,左方括号分别放入栈内;如果str[i]是右括号,那么就看放进栈内的最后一个元素(即栈顶元素)是不是等于sri[i] 如果不相等,那么就返回false循环结束;相等那么删除栈顶元素(此时消除一对闭合的括号)继续循环下一个元素;直到循环结束,如果栈为空,那么就说明括号全部闭合。

代码如下:

class ArrayStack1<T>{

    // 安装ts-node实现数组的栈结构

    // 定义一个数组 存放元素

    private data: any[] = []  // 创建一个私有的属性data 初始值为[] 里面可以存放任何类型的数据

    // 封装方法:

    // 1、往栈里放元素

    push(element: T): void {

        this.data.push(element)

    }

    // 2、将栈顶的元素弹出栈

    pop(): T | undefined {

        return this.data.pop()

    }

    // 3、查看栈顶元素

    peek(): T | undefined {

        return this.data[this.data.length - 1]

    }

    // 判断是都为空

    isEmpty(): boolean {

        return this.data.length === 0

    }

    // 4、查看栈内的个数

    size(): number {

        return this.data.length

    }

}

export default ArrayStack1

import ArrayStack1 from "./02重构";

function stringkuohao(str: string) {

    const stack = new ArrayStack1<string>()

    for (let i = 0; i < str.length; i++) {

        switch (str[i]) {

            case '(':

                stack.push(')')

                break

            case '{':

                stack.push('}')

                break

            case '[':

                stack.push(']')

                break // 跳出switch语句

            default:

                if (stack.peek() !== str[i]) {

                    console.log(stack.peek(), 'defalt');

                    return false

                } else {

                    stack.pop()

                }

        }

    }

    if (stack.isEmpty()) {

        return true

    }

    return false

}

console.log(stringkuohao('{[()]}'));

console.log(stringkuohao('{[('));

console.log(stringkuohao('{[(})]'));

export { }


 

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值