判断由"()[]{}"6种括号组成的字符串是否合法
1. 所有括号必须闭合
2. 左括号必须在正确的位置闭合
function check(str) { const ary = []; const map = { '[': ']', '{': '}', '(': ')', }; for(let v of str) { if(v === '['|| v === '{'|| v === '(') { ary.push(v); } else{ if(map[ary.pop()] !== v) { return false; } } } if(ary.length === 0) { return true; } return false; }
var str = readline(); var n = str.length; var arr = []; var j=0; for(var i=0;i<n;i++){ switch(str[i]){ case '(': arr[j++] = '('; break; case '[': arr[j++] = '['; break; case '{': arr[j++] = '{'; break; case ')': if(arr[j-1]=='('){ j--; }else{ i=n;//跳出 } break; case ']': if(arr[j-1]=='['){ j--; }else{ i=n;//跳出 } break; case '}': if(arr[j-1]=='{'){ j--; }else{ i=n;//跳出 } break; } } if(j==0){ console.log("true"); }else{ console.log("false"); }
function IsValue(str) { let map = new Map([ ['(',')'], ['{','}'], ['[',']'] ]) let stack = []; for(let i = 0 ; i < str.length ; i ++) { if(map.has(str[i])) { // 在左边 stack.push(str[i]) } else { // 在右边 if(stack.length == 0) return false; let top = stack[stack.length - 1]; // 栈顶元素 if(map.get(top) == str[i]) { stack.pop() } else { return false; } } } return true; } while(line = readline()) { var str = line; print(IsValue(str)) }
//leetcode20 vaild [] const readline = require('readline') const rl = readline.createInterface({ input: process.stdin, ouput: process.stdout }) let inArr = [] rl.on('line',line=>{ if(!line) return inArr.push(line.trim()) if(inArr.length === 1){ let arr = inArr[0].split('') console.log(isValid(arr)) } }) var isValid = function(s) { let map = { '(':-1, ')':1, '{':-2, '}':2, '[':-3, ']':3 } let stack = [] for(let i=0;i < s.length;i++){ if(map[s[i]] < 0){ stack.push(s[i]) }else { let last = stack.pop() if(map[last] + map[s[i]] != 0){ return false } } } if(stack.length > 0) return false return true };
function fun(){ var str = readline(); var n = str.length; let map=new Map() let a=[] map.set('{','}') map.set('[',']') map.set('(',')') for(let i=0;i<n;i++){ if(map.has(str[i])){ a.push(str[i]) }else{ if(map.get(a.pop())!==str[i]){ return false } } } if(a.length===0){ return true }else { return false } } let res=fun() console.log(res)
const str = readline(); const test = (str) => { const regx = /(\(\))|(\[\])|(\{\})/g while (regx.test(str)) { str = str.replace(regx, ''); } let res = str.length ? false : true; return res; } const result = test(str); console.log(result);利用正则表达式把括号都消掉然后判断最后字符串的长度是否为0
#include<iostream> using namespace std; int main(void) { string s; cin >> s; int stack[10000]; int top = -1; int mapper[10000]; mapper[')'] = '('; mapper['}'] = '{'; mapper[']'] = '['; for(int i = 0; i < s.length(); i++){ if(s[i] == '(' || s[i] == '[' || s[i] == '{'){ stack[++top] = s[i]; } else{ if(stack[top] == mapper[s[i]]){ top--; }else{ cout << "false"; return 0; } } } if(top == -1){ cout << "true"; } else{ cout << "false"; } return 0; }
var arr=readline().split("") function yan(arr){ let arr1=[]; for(let i=0;i<arr.length;i++){ if(arr[i]=='('||arr[i]=='['||arr[i]=='{'){ arr1.push(arr[i]) continue; } else if(arr[i].charCodeAt(0)-arr1[arr1.length-1].charCodeAt(0)<=2){ arr1.pop(); continue; } } if(arr1.length==0){ return true; }else{ return false; } } console.log(yan(arr))
var lines = readline().split("") var stack = [] let res for(let i=0;i<lines.length;i++){ if(lines[i] === "("||lines[i] ==="{" ||lines[i]==="["){ stack.push(lines[i]) }else{ let temp = stack.pop() if(lines[i]===")"){ if(temp!=="("){ res = "false" break } } if(lines[i]==="]"){ if(temp!=="["){ res = "false" break } } if(lines[i]==="}"){ if(temp!=="{"){ res = "false" break } } } } if(res==="false"){ print("false") }else{ if(stack.length>0){ print("false") }else{ print("true") } }
const readline = require('readline') const rl = readline.createInterface({ input:process.stdin, output: process.stdout }) rl.on('line',line=>{ print(compareStr(line)) }) function equal(c1,c2){ if(c1=="("&&c2==")"){ return true; }else if(c1=="{"&&c2=="}"){ return true; }else if(c1=="["&&c2=="]"){ return true; }else{ return false; } } function compareStr(str){ var newArr = []; if(str.length==0){ return false }else if(str[0]==")"||str[0]=="}"||str[0]=="]"){ return false; } for(let i = 0;i<str.length;i++){ if(str[i]=="("||str[i]=="{"||str[i]=="["){ newArr.push(str[i]) }else if(str[i]==")"||str[i]=="}"||str[i]=="]"){ if(newArr.length==0){ return false; }else{ if(newArr.length>0&&equal(newArr[newArr.length-1],str[i])){ newArr.pop(); }else{ return false; } } } } return true; }我的问题到底出在哪,牛客上一直说语法问题,自己编译器可以正常输出
function cp(str1, str2) { if (str1 === "{" && str2 === "}") return true; if (str1 === "[" && str2 === "]") return true; if (str1 === "(" && str2 === ")") return true; return false; } function ***(str) { const stack = []; for (let i = 0; i < str.length; i++) { if (!cp(str[i], stack[0])) { stack.unshift(str[i]); continue; } stack.shift(); } if (stack.length === 0) return true; return false; }
function match(str) { let obj = { "{": "}", "[": "]", "(": ")" } let stack = []; for (let i = 0;i < str.length;i++) { if (str[i] == "{" || str[i] == "[" || str[i] == "(") { stack.push(str[i]); }else { if (str[i] != obj[stack[stack.length - 1]]){ return false; }else { stack.pop(); } } } if (stack.length == 0){ return true; }else { return false; } } while (line = readline()) { var str = line; print(match(str)); }