首页 > 试题广场 > 获取n维数组的最大深度
[编程题]获取n维数组的最大深度
  • 热度指数:2320 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入参数为字符串型的n维数组,数组的每一项值为数组 或 int型数字。请实现一个函数,可以获取列表嵌套列表的最大深度为多少。

输入描述:
输入参数为字符串型的 n维数组,列表的每一项值为数组 或 int型数字。数组内的数组,每一项值,也可以是数组 或 int型数字。


输出描述:
int型数字,表示数组嵌套的深度。
示例1

输入

[[1], [2,3,4], [5,[2,3]], [7], [0,[1,2,3,4],3,5], [1,3], [3,2,4]]

输出

3

说明

n维数组的深度为3
有括号的题目第一时间想到栈
s = raw_input()
count = []
m = 0
for i in s:
    if i == "[":
        count.append(i)
        if len(count)>m:
            m = len(count)

    elif i == "]":
        count.pop()
print m

发表于 2019-07-24 10:24:28 回复(0)
#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;
}

发表于 2019-10-20 22:13:40 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    string s;
    getline(cin, s);
    int n = s.length(), cnt=0, Max=0;
    for(int i=0;i<n;i++){
        if(s[i]=='[')
            cnt++;
        else if(s[i]==']')
            cnt--;
        Max = max(Max, cnt);
    }
    cout<<Max<<endl;
    return 0;
}

编辑于 2019-07-18 09:03:40 回复(2)
"""
括号配对
"""

if __name__ == "__main__":
    s = input()
    ans, tmp = 0, 0
    for c in s:
        if c == '[':
            tmp += 1
            ans = max(ans, tmp)
        elif c == ']':
            tmp -= 1
    print(ans)

发表于 2019-07-16 11:47:48 回复(0)
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);
    }
}
编辑于 2019-07-15 17:01:56 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    getline(cin,s);
    int res=0,n=0;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='[')
        {
            n++;
            res=max(res,n);
        }
        else if(s[i]==']')
            n--;
    }
    cout<<res<<endl;
    return 0;
}

编辑于 2019-07-05 20:52:19 回复(0)
Java解答:
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);
    }
}


发表于 2019-08-06 15:39:19 回复(0)
import java.util.Stack;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String arrStr = input.nextLine();
        int length = 0;
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < arrStr.length(); i++) {
            char ch = arrStr.charAt(i);
            if (ch == '[') {
                stack.push(ch);
                if (stack.size() > length) {
                    length = stack.size();
                }
            } else if (ch == ']') {
                stack.pop();
            }
        }
        System.out.println(length);
    }
}

发表于 2019-12-13 09:16:58 回复(1)

 
import sys
str = sys.stdin.readline()
sum = 0
list1=[]
list2=[]
for i in str:
    if i == "[":
        list1.append(i)
        result = len(list1)
        list2.append(result)
    elif i == "]":
        list1.pop()
print(max(list2))

发表于 2019-10-26 20:23:51 回复(0)
let arrDeep = [123, [45], 4, [678, [9, [10]]], [678, [910]]]; // 4
let arrDeep2 = [12, [3], 4]; //2
let num = 0;
let att = 0;
function getDeep(arr){
  if(arr.constructor === Array){
    att++;
    num = Math.max(numatt);
    while(arr.length){
      let temp = arr.shift();
      getDeep(temp)
    }
    att--
  }else{
    return 
  }
}
getDeep(arrDeep)
发表于 2019-09-23 09:33:45 回复(1)
deep = 0
counter = 0
input_str = input()
for ch in input_str:
    if ch == "[":
        counter += 1
        if counter > deep:
            deep = counter
    elif ch == "]":
        counter -= 1
print(deep)
    # else: don't need to do anything

发表于 2019-09-06 19:43:40 回复(0)
python 3
mx=0
ct=0
ls = input()
for i in range(len(ls)):
    if (ls[i] == '['):
        ct=ct+1
    elif (ls[i] == ']'):
        if (ct > mx):
            mx=ct
        ct=ct - 1
print(mx)


发表于 2019-09-03 10:57:39 回复(0)
stack
line = input()

stack = []
depth = 0
for i in range(len(line)):
    if line[i] == "[":
        stack.append("[")
        depth = max(depth, len(stack))
    elif line[i] == "]":
        stack.pop()
    else:
        pass
print(depth)


发表于 2019-09-02 03:58:45 回复(0)
依次扫描字符串,如果是 [ 则入栈,计数加一,如果是 ] 则出栈,计数减一,期间记录的计数的最大值即为最大深度。
array = input()
stack = []
temp = 0
maxval = 0
for i in array:
    if i == '[':
        stack.append(i)
        temp += 1
        maxval = max(maxval, temp)
    elif i == ']':
        stack.pop()
        temp -= 1
print(maxval)


发表于 2019-08-26 21:59:15 回复(0)
#include <iostream>
#include <stack>
using namespace std;
int main(void){
    string s;
    stack<char> stk;
    int max = 0;
    getline(cin, s);
    for(char c : s){
        if(c == '['){
            stk.push(c);
            if(stk.size() > max)
                max = stk.size();
        }
        if(c == ']'){
            stk.pop();
        }
    }
    cout<<max<<endl;
    return 0;
}
整行输入用getline而不会直接用cin,cin读取字符串遇到空格停止
发表于 2019-08-26 16:45:01 回复(0)

s = input()
res, count = 0,0
for i in range(len(s)):
    if s[i] == '[':
        count += 1
        res = max(res, count)
    if s[i] == ']':
        count -= 1
print(res)
发表于 2019-07-17 07:51:30 回复(0)
var str = readline();
var n = 0;
var max = 0;
for(let i =0;i<str.length;i++){
    if(str[i]=='['){
        n++;
        max = n>max?n:max;
    } else if(str[i]==']'){
        n--;
    }
}
print(max)

发表于 2019-07-13 18:43:03 回复(0)
s = input()
num,max_num = 0,0
for i in s:
    if i=='[':
        num+=1
    elif i==']':
        num-=1
    max_num = max(max_num, num)
print(max_num)

发表于 2019-07-13 09:59:59 回复(0)