力扣题库之判断是否为有效字符串
// 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
// 有效字符串需满足:
// 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
// 注意空字符串可被认为是有效字符串。
//思路 : 什么样的括号是合理的? 一组括号里面如果有其他的括号,那么也必须是一组或多组的 括号一定是成对出现的
// ASCLL码表 : 各个括号的码值: (:40 , ):41 , {:123 , }:125 , [:91 , ]:93
var isValid = function(s) {
//如果为空那么返回true
if (s.length == 0) {
return true;
}
//如果数组的长度时奇数,那么一定时不合法的
if (s.length % 2 === 1) {
return false;
}
//将字符串的每一项的括号转为ASCLL值,并插入新数组
var arr = [];
for (var j = 0; j < s.length; j++) {
arr.push(s.charCodeAt(j))
}
// console.log(arr)
var newArr = []
//如果一开始就是右括号,返回false
if(arr[0] == 41 || arr[0] == 93 || arr[0] == 125){
return false;
}
//同理,如果最后一个是左括号,那么直接返回false
if(arr[arr.length - 1] == 40 || arr[arr.length - 1] == 91 || arr[arr.length - 1] == 123){
return false;
}
//遍历数组,如果是左括号,那么直接存入新数组,如果是右括号,则与最后存入新数组的括号相比较,
for( var i = 0 ; i < arr.length ; i ++){
if(arr[i] == 40 || arr[i] == 91 || arr[i] == 123){
newArr.push(arr[i])
}
// console.log(newArr)
// console.log(arr[i] - newArr[newArr.length - 1])
if ((arr[i] == 41 || arr[i] == 93 || arr[i] == 125) && (arr[i] - newArr[newArr.length - 1] == 1 || arr[i] - newArr[newArr.length - 1] == 2)) {
newArr.pop()
// console.log(newArr)
}
if(newArr.length == 0){
return true
}
}
return false
}