首页 > 试题广场 >

检测括号配对是否合法

[编程题]检测括号配对是否合法
  • 热度指数:602 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入为只包含'(', ')', '{', '}', '[' 和']'这六个括号字符的字符串。判断输入字符串中的括号是否符合代数算式规则。例如, "()"、"({})" 和 "()[]" 是合法的括号。而 "(]" 和 "([)]" 不是。

输入描述:
输入包含一行:
包括一个只含'(',')','{','}','[',']'的字符串,长度小于等于50


输出描述:
合法输出true,否则输出false。
示例1

输入

()

输出

true
import java.util.Scanner;
import java.util.Stack;

/**
 * 
 * 输入为只包含'(', ')', '{', '}', '[' 和']'这六个括号字符的字符串。判断输入字符串中的括号是否符合代数算式规则。例如,
 * "()"、"({})" 和 "()[]" 是合法的括号。而 "(]" 和 "([)]" 不是。
 * 
 * @author Zzk
 *
 */
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			String s = sc.next();
			System.out.println(bracketMatch(s));
		}
	}

	private static boolean bracketMatch(String s) {
		Stack<Character> stack = new Stack<Character>();
		boolean flag = true;
		char[] chs = s.toCharArray();
		Character c;
		for (char ch : chs) {
			if (ch == '(' || ch == '[' || ch == '{') {
				stack.add(ch);
			} else {
				if (stack.isEmpty()) {
					flag = false;
					break;
				} else {
					c = stack.peek();
					if (isMatch(c, ch)) {
						stack.pop();
					} else {
						flag = false;
						break;
					}
				}
			}
		}
        if(stack.size()!=0)
            flag = false;
		return flag;
	}

	private static boolean isMatch(Character ch, char c) {
		if (ch == '{' && c == '}') {
			return true;
		}
		if (ch == '(' && c == ')') {
			return true;
		}
		if (ch == '[' && c == ']') {
			return true;
		}
		return false;
	}
}


发表于 2017-09-12 13:57:04 回复(0)
let line = readline()
const arr = []
let tmp 
let res = true
for(let item of line) {
  switch(item) {
    case '(': 
    case '[':
    case '{': arr.push(item)  
      break
    case ')': 
      tmp = arr.pop() 
      if(tmp !== '(') res = false
      break
    case ']': 
      tmp = arr.pop() 
      if(tmp !== '[') res = false
      break
    case '}': 
      tmp = arr.pop() 
      if(tmp !== '{') res = false
  }
}
if(res) {
  res = arr.length === 0 ? true : false
}
print(res)

发表于 2021-08-07 16:49:38 回复(0)
#include<stdio.h>
#include<stack>
#include<map>
using namespace std;
int main(){
    stack<char> s;
    map<char,char> book;
    book[')']='(',book[']']='[',book['}']='{';
    char in[100];
    scanf("%s",in);
    int flag=1,i;
    for(i=0;in[i]!='\0';i++)
        if(in[i]=='('||in[i]=='['||in[i]=='{') s.push(in[i]);
        else{
            if(s.empty()||s.top()!=book[in[i]]){
                flag=0;break;
            }
            s.pop();
        }
    printf("%s",s.empty()&&flag?"true":"false");
}

发表于 2017-11-14 10:14:47 回复(0)
def main(s):
    while '{}' in s&nbs***bsp;'()' in s&nbs***bsp;'[]' in s:
        s = s.replace('{}', '')
        s = s.replace('[]', '')
        s = s.replace('()', '')
    return s == ''

就没懂为何在牛客网上运行不了
发表于 2021-06-10 16:06:10 回复(0)
使用数据结构中的栈来保存数据
发表于 2017-09-17 13:32:54 回复(0)
wa2头像 wa2
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char a[60]="",s[60]="";
    int i,j=-1;
    cin>>a;
    for(i=0;i<strlen(a);++i){
        if(j==-1){s[++j]=a[i];continue;}
        if(a[i]=='('||a[i]=='['||a[i]=='{'){s[++j]=a[i];continue;}
        else if(a[i]-s[j]==1||a[i]-s[j]==2)s[j--]=0;
        else {cout<<"false"<<endl;return 0;}
    }
    cout<<(j==-1?"true":"false")<<endl;
    return 0;
}

发表于 2017-09-14 11:47:24 回复(0)