判断由"()[]{}"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));
}