列表

详情


NC54249. 嵌套深度

描述

在一段C语言代码中,括号是可以嵌套的。例如:
  1. “()”表示没有嵌套;
  2. “(())”表示嵌套1层;
  3. “(((())))”嵌套了3层; 
  4. “((())((())))()” 嵌套最深为3层;
  5. “)()())”的括号没有闭合。
你的任务就是输出这个括号字符串里面括号嵌套的最深深度,如果括号没有结合,就输出 -1 。

输入描述

题目有多组数据,第一行  表示数据组数
接下来 n 行为括号组成的表达式 s 长度小于100,中间不含空格单纯由括号组成。

输出描述

每个表达式括号的嵌套最深深度,如果括号最后没有闭合,输出-1

示例1

输入:

2
()(())()
)(

输出:

1
-1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Java(javac 1.8) 解法, 执行用时: 49ms, 内存消耗: 12044K, 提交时间: 2020-02-16 14:44:24

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i = 0; i < n; i++){
			String s = sc.next();
			char [] c = s.toCharArray();
			int zuo = 0;
			int you = 0;
			int max = 0;
			for (int j = 0; j < c.length; j++){
				if (c[j] == '('){
					zuo++;
				}
				if (c[j] == ')'){
					you++;
				}
				if (you > zuo) {
					max = -1;
					break;
				}
				if (c[j] == ')'){
					if (zuo > max){
						max = zuo - 1;
					}
					zuo--;
					you--;
				}
			}
			
			System.out.println(max);
		}
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 380K, 提交时间: 2019-10-24 19:32:33

#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int main(){
	stack<int> t;
	char ch;
	int T,ans,co;
	int f;
	scanf("%d",&T);
	getchar();
	while(T--){
		ans=-1;
		co=1;
		f=1;
		while(scanf("%c",&ch)&&ch!='\n'){
			if(ch=='(') {
				t.push(co);
				co++;
				ans=max(ans,co);
			}
			else{
				if(!t.empty()){
					t.pop();
					co--;
				}
				else{
					f=0;
				}
			}
		}
//		printf("%d\n",ans-1);
		if(f==1&&co==1) printf("%d\n",ans-2);
		else printf("-1\n");
	}
    return 0;
}

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 496K, 提交时间: 2019-10-24 10:13:11

#include<iostream>
#include<string> 
using namespace std;
int main() {
	int n;
	cin >> n;
	while(n--) {
		string s;
		int t = 0, max = 0;
		cin >> s;
		for(int i = 0; i < s.length(); i++) {
			if(t < 0) break;
			if(s[i] == '(') {
				t++;
			}else {
				if(max < t) max = t;
				t--;
			}
		}
		if(t == 0){
			cout << max - 1 << endl;
		} else {
			cout << -1 << endl;
		}
	}
}

Python3 解法, 执行用时: 41ms, 内存消耗: 4524K, 提交时间: 2023-08-08 17:39:18

n = int(input())
for j in range(n):
    max = 0
    k = []
    ch = input()
    for i in ch:
        if i == '(':
            k.append(i)
            if len(k) >= max:
                max = len(k)
        else:
            if len(k) == 0:
                print("-1")
                break
            else:
                k.pop()
    else:
        print(f"{max-1}")

上一题