'{[()]}' ==>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 { }