输入参数为字符串型的 n维数组,列表的每一项值为数组 或 int型数字。数组内的数组,每一项值,也可以是数组 或 int型数字。
int型数字,表示数组嵌套的深度。
[[1], [2,3,4], [5,[2,3]], [7], [0,[1,2,3,4],3,5], [1,3], [3,2,4]]
3
n维数组的深度为3
#include <stdio.h> #include <stdlib.h> #include <assert.h> const int MAX_N = 1 << 16; // 65536 int main(const int argc, const char* const argv[]) { char input[MAX_N] = ""; gets(input); char stk[20]; int top = -1, ans = 0; const char* p = input; while (*p) { switch (*p) { case '[': *(stk + ++top) = '['; ans = fmax(ans, top + 1); break; case ']': --top; break; default: break; } ++p; } assert(top == -1); return fprintf(stdout, "%d", ans), 0; }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); char[] str = br.readLine().trim().toCharArray(); int maxDepth = 0; int depth = 0; for(int i = 0; i < str.length; i++){ if(str[i] == '['){ // 遇到左括号就将深度+1 depth ++; }else if(str[i] == ']'){ // 遇到右括号先更新一下当前最大的深度,再平衡掉一个左括号重新计算当前的depth maxDepth = Math.max(maxDepth, depth); depth --; } } System.out.println(maxDepth); } }
import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); Stack<Character> stack = new Stack<>(); int maxSize=0; for (int i = 0,len =s.length(); i < len ; i++) { if (s.charAt(i)=='['){ stack.push('['); maxSize=Math.max(maxSize,stack.size()); }else if (s.charAt(i)==']') stack.pop(); } System.out.println(maxSize); } }
import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); int count = 0, max = 0; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '[') { count++; max = (max > count) ? max : count; } else if (s.charAt(i) == ']') count--; } System.out.println(max); } }
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner input = new Scanner(System.in); String s = input.nextLine(); int depth = 0; int max = 0; for (int i = 0;i<s.length();i++){ if (s.charAt(i) == '['){ depth++; }else if (s.charAt(i) == ']'){ depth--; } if (depth > max) max = depth; } System.out.println(max); } }
#include<bits/stdc++.h> using namespace std; char ch; int main() { int left = 0; int ans = 0; while (cin >> ch) { if (ch == '[') { ++left; ans = max(ans, left); } else if (ch == ']') { --left; } } cout << ans << endl; return 0; }
class MainActivity: def main(self): # Read the data s = input() # Initialization stack = [] result = 0 # Traverse for char in s: if char in {'[', ']'}: if char == '[': stack.append('[') result = max(result, len(stack)) else: if stack: stack.pop() print(result) if __name__ == '__main__': M = MainActivity() M.main()
package main import ( "fmt" "os" "bufio" ) var in=bufio.NewReader(os.Stdin) func main() { s,_:=in.ReadString('\n') stk:=[]byte{} max:=0 for _,ch:=range []byte(s){ if ch=='['||ch==']'{ if len(stk)>0&&stk[len(stk)-1]=='['&&ch==']'{ stk=stk[:len(stk)-1] }else{ stk=append(stk,ch) } } if len(stk)>max{ max=len(stk) } } fmt.Print(max) }
#include <iostream> #include <string> int getMax(std::string exp) { int result = 0, temp = 0; for (char x : exp) { if (x == '[') { temp++; if (temp > result) { result = temp; } } else if (x == ']') { temp--; } } return result; } int main() { std::string exp; std::getline(std::cin, exp); std::cout << getMax(exp) << std::endl; return 0; }
#include<iostream> (720)#include<string> #include<stack> (850)#include<algorithm> using namespace std; const int MaxLen = 100000; int main(void){ string s; string temp; stack<char> st; int ans = 0; char str[MaxLen]; while (scanf("%s", str) == 1){ string s1(str); temp += s1; } for (int i = 0; i < temp.size(); i++){ if (temp[i] == '[') st.push('['); else if(temp[i] == ']'){ ans = max(ans, int(st.size())); st.pop(); } } cout<<ans<<endl; return 0; }
def find(s): q=[] res=0 for i in s: if i=='[': q.append(i) elif i==']': q.pop() res=max(res,len(q)) print(res) find(input())
一种笨办法,但是我觉得可行? var arr=eval(readline()) // 提示 请检查是否存在语法错误或者数组越界非法访问等情况 // 通过率只有86%,什么原因?? function mynum(arr){ // 数组 if(Object.prototype.toString.call(arr)=='[object Array]'){ if(arr.length==0){ return 1 }else{ let myarr=[] arr.forEach((item)=>{ if(Object.prototype.toString.call(item)=='[object Array]'){ myarr.push(mynum(item)) }else{ myarr.push(0) } }) return 1+Math.max.apply(null,myarr) } }else{ // 不是数组的时候返回 0 return 0 } } console.log(mynum(arr))
#include <iostream> #include <string> using namespace std; int arrayMaxDepth(string s) { int i = 0; int maxDepth = 0; int temp = 0; while (s[i] != '\0'){ if (s[i] == '['){ temp++; i++; } else if (s[i] == ']') { temp--; i++; } else { i++; } if (temp > maxDepth){ maxDepth = temp; } } return maxDepth; } int main() { string s; getline(cin,s); cout << arrayMaxDepth(s); return 0; }
import java.io.*; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String str = bf.readLine(); int count = 0; int max = 0; for(int i =0;i < str.length();i++){ if(str.charAt(i) == '['){ count++; if(count > max){ max = count; } } if(str.charAt(i) == ']'){ count--; } } System.out.println(max); } }leetcode上面的一道题很类似,拿走不谢:https://leetcode-cn.com/problems/remove-outermost-parentheses/