牛客题解 | 括号匹配深度
题目
题解
题目难度:简单
知识点:字符串、数组、栈
分析:
因为题目本身是针对合法字符串求深度,省去了判断字符串是否合法的步骤,所以该题较简单,下面给出2种解法
方法1: 利用数组,统计到当前位置Xi时连续左括号的长度
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;
public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLine();
    
    // 1. 利用数组解决
    int res = arraySolve(s);
    System.out.println(res);
  }
  
  private static int arraySolve(String strs) {
    if(strs==null || strs.length()==1){
      return 0;
    }
    
    int count = 0;
    int[] nums = new int[strs.length()];
    for(int i = 0; i<strs.length();i++){ if(strs.charat(i)="='('){" nums[i]="--count;" }else{ )说明有匹配的出现了 } arrays.sort(nums); return nums[nums.length-1]; ``` ## 方法2: 利用栈,左括号入栈,右括号出栈,并在出栈前统计栈的大小,也就是求出栈的最大深度即可。 import java.util.arrays; java.util.hashmap; java.util.map; java.util.scanner; java.util.stack; public class main { static void main(string[] args) scanner sc="new" scanner(system.in); string s="sc.nextLine();" 2. 利用单调栈解决 int res="stackSolve(s);" system.out.println(res); private stacksolve(string s) if(s="=null" || s.length()="=1){" 其实在本题中不存在这种情况 0; stack<character> stack = new Stack<>();
    int count = Integer.MIN_VALUE;
    // '('入栈,  ')'弹栈并在弹栈前更新结果
    for(int i = 0; i < s.length(); i++){
      if(s.charAt(i) == '(' ){
        stack.push('(');
      }else{
        count = Math.max(count, stack.size());
        stack.pop();
      }
    }
    return count;
  }
}
</strs.length();i++){>
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号