数据结构之栈的应用(判断字符串中括号的合法性)
数据结构之栈(判断字符串中括号的合法性)
需求: 判断一个字符串中的括号是否成对,是否合法?
const str1 = '((3223)2)2(2)'
const str2 = ')22(12)sf1(sdfs'
-
思路:
- 创建一个后进先出的栈
- 遍历字符串
- 如果元素是( 压入栈中
- 如果是 ),就要判断栈是否为空,如果为空返回‘不合法’;如果不为空,就弹出栈顶元素
- 如果遍历结束了,就要再次判断栈是否为空,如果为空返回‘合法’,否则返回‘不合法’
-
步骤:
// 1. 引入栈结构的构造函数 const Stack = require('./Stack') const str1 = '((3223)2)2(2)' const str2 = ')22(12)sf1(sdfs' // 2. 创建一个函数,在函数中初始化一个栈结构,遍历要判断的字符串 /** * @description 判断一个字符串中包含的括号是否成对,是否合法 * @param {String} str 要判断合法性的字符串 */ function is_legal_brackets(str) { // 初始化栈结构 const stack = new Stack() // 遍历字符串 for (const item of str) { if (item === '(') { stack.push(item) } if (item === ')') { if (stack.isEmpty()) { return '不合法' } stack.pop() } } return stack.isEmpty() ? '合法' : '不合法' } // 3. 调用定义好的is_legal_brackets函数 console.log('str1是否合法? => ', is_legal_brackets(str1)); // 合法 console.log('str2是否合法? => ', is_legal_brackets(str2)); // 不合法