题解
题目难度:简单
知识点:字符串、数组、栈
分析:
因为题目本身是针对合法字符串求深度,省去了判断字符串是否合法的步骤,所以该题较简单,下面给出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{ // )说明有匹配的出现了 nums[i]=--count; } } Arrays.sort(nums); return nums[nums.length-1]; } }
方法2: 利用栈,左括号入栈,右括号出栈,并在出栈前统计栈的大小,也就是求出栈的最大深度即可。
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(); // 2. 利用单调栈解决 int res = stackSolve(s); System.out.println(res); } private static int stackSolve(String s) { if(s==null || s.length()==1){ //其实在本题中不存在这种情况 return 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; } }