NC54249. 嵌套深度
描述
输入描述
题目有多组数据,第一行 表示数据组数
接下来 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}")