网站建设合同有法律效益吗,西安网站建设网站推广,所有域名后缀参考大全,自学网站查分数1、问题 给定一个只包括 (#xff0c;)#xff0c;{#xff0c;}#xff0c;[#xff0c;] 的字符串 s #xff0c;判断字符串是否有效。 有效字符串需满足#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类…1、问题 给定一个只包括 (){}[] 的字符串 s 判断字符串是否有效。 有效字符串需满足 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
2、示例
1 输入s () 输出true
2 输入s ()[]{} 输出true
3 输入s (] 输出false
3、思路 先判断是否括号数是不是偶数然后通过循环遍历字符串中的每一项通过switch匹对符号是左括号都压入栈是右括号通过匹配判断弹出的是否和遍历到的右括号匹配不匹配返回false 4、步骤
1判断括号数 2设置空栈空数组 3循环遍历字符串中的各项 1循环内通过switch-case匹配判断左括号都压入栈是右括号通过匹配判断弹出的是否和遍历到的右括号匹配不匹配返回false 4返回栈长若为空说明匹配完闭 5、完整代码这里有两个方法isValid是官方的方法法二是这里讲述的方法
!DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0title有效的括号/title
/head
bodyp给定一个只包括 (){}[] 的字符串 s 判断字符串是否有效。p有效字符串需满足左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。/p/pp输入s ()输出true/pp输入s ()[]{}输出true/pp输入s (]输出false/pp不行将字符串切割成数组然后将数组的半数长度存入变量作为终止条件然后外层循环从前往后变量内层循环从后向前遍历以空间遇到和上一个不同的存入不同的数组需要三个数组/p
/body
script// let str ()let str (]isValid(str)isValid1(str)function isValid(s) {const n s.length;// 括号数是奇数不符合直接返回falseif (n % 2 1) {return false;}// 创建右括号到左括号的映射方便找到左括号const pairs new Map([[), (],[], [],[}, {]]);// console.log(pairs);// 建立空栈方便存储和弹出const stk [];// 遍历字符串的每一项for (let ch of s) {// console.log(ch);// 如果字符中有map中的一个右括号可以是)或]或}查看是否有相应的左括号进行匹配if (pairs.has(ch)) {// 如果栈为空或者栈中无左括号可以与之匹配返回falseif (!stk.length || stk[stk.length - 1] ! pairs.get(ch)) {return false;}// 可以匹配弹出左括号stk.pop();}else {// 左括号压入栈stk.push(ch);}};// 遍历完后空栈为true否则false// console.log(!stk.length,1111);return !stk.length;}function isValid1(s){let n s.length// 括号数是奇数不符合直接返回falseif (n % 2 1) {return false;}// 先用循环然后在循环中使用switch、case判断括号是否符合左括号压入栈、右括号弹出// 空栈存储let stk []for (let i of s) {// console.log(i); switch (i) {case (:case [:case {:stk.push(i)break; case ):// stk.pop返回值是弹出的那一项pop从数组最后开始弹出// console.log(stk.pop());if (stk.pop()!() return falsebreak;case ]:if (stk.pop()![) return falsebreak;case }:if (stk.pop()!{) return falsebreak; }}// console.log(!stk.length);// 遍历完后空栈为true否则false// console.log(!stk.length,1111);return !stk.length}
/script
/html
6、力扣通过代码
var isValid function(s) {let n s.length// 括号数是奇数不符合直接返回falseif (n % 2 1) {return false;}// 先用循环然后在循环中使用switch、case判断括号是否符合左括号压入栈、右括号弹出// 空栈存储let stk []for (let i of s) {// console.log(i); switch (i) {case (:case [:case {:stk.push(i)break; case ):// stk.pop返回值是弹出的那一项pop从数组最后开始弹出// console.log(stk.pop());if (stk.pop()!() return falsebreak;case ]:if (stk.pop()![) return falsebreak;case }:if (stk.pop()!{) return falsebreak; }}// console.log(!stk.length);// 遍历完后空栈为true否则false// console.log(!stk.length,1111);return !stk.length
};