题目描述:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
//示例 1:
输入: "()"
输出: true
//示例 2:
输入: "()[]{}"
输出: true
//示例 3:
输入: "(]"
输出: false
//示例 4:
输入: "([)]"
输出: false
//示例 5:
输入: "{[]}"
输出: true
输出: true
自己算法思路:
-
首先判断字符串是否为空,如果为空,直接认为是有效字符串,返回true;
-
其次判断字符串的长度是否是偶数,如果是奇数,返回false
-
然后利用栈的数据结构来解题,逐个判断字符串
-
(1)声明一个对象
const obj = { "{": "}", "[": "]", "(": ")" }
-
(2)如果是左括号,就从obj中取出对应的值压入栈中,如果是右括号,判断栈是否为空,为空则返回false,再判断栈顶是不是对应的左括号,如果是,则将栈顶的元素出栈,如果不是,则返回false。
-
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
// 如果s的长度%2 不等于0就返回flase
if (s.length % 2 === 1) return false;
if (s.length === 0) return true;
const obj = {
"{": "}",
"[": "]",
"(": ")"
}
let items = [];
for (let i = 0; i < s.length; i++) {
if (s[i] === '{' || s[i] === '[' || s[i] === '(') {
items.push(s[i])
} else if(s[i] !== obj[items.pop()]){
return false;
}
}
return items.length === 0 ? true : false;
};
console.log(isValid("))")); //fasle
console.log(isValid("([)]")); //false
console.log(isValid("()")); //true
console.log(isValid("()[]{}")); //true
console.log(isValid("(]")); //false
console.log(isValid("({{{{}}}))")); //false