import java.util.*;
import java.math.*;
public class Main {
static char[] arr;
static int index = 0 ;//全局变量控制位置
public static void main(String[]args) {
Scanner in = new Scanner(System.in);
String s = in.next();
arr = s.toCharArray();//装 输入的字符串
int ans = dfs();
System.out.print(ans);
}
public static int dfs(){
int kuo = 0;//如果遇到右括号则return
int left = 0, right = 0;
boolean lr = false;//判断在|左边或右边
boolean shu = false;//判断是否遇到过|
while(index < arr.length) {//控制在字符串内
if(arr[index] == 'x') {
// 如果在|左边 / 如果在|右边
if(!lr)left++;
else right++;
}
else if(arr[index] == '(') {//如果遇到左括号则进入下一层,记得要index++否则死循环
index++;
int re = dfs();//存储括号里返回的值
// 若此值在右边则加到right 反之亦然
if(lr) right += re;
else left += re;
}
else if(arr[index] == '|') {
// 如果是第一次遇到则不用比较,将shu和lr变为true,从此记录|右边的x的数量
if(!shu) {
shu = true;
lr = true;
}
if(shu) {
// 第i次(i > 1)遇到|,由于left和right都被占了所以需要选取最大值来空出right
left = left > right ? left : right;
right = 0;
}
}
else {//遇到右括号 kuo--变为-1,return,由于此重会index++,回到上层index再一次++所以先index--一次
kuo--;
index--;
}
index ++;
if(kuo < 0 )return left > right ? left : right;
}
// 最后一次返回 由于没有括号所以不会触发上行语句
return left > right ? left : right;
}
}
Java 蓝桥杯 正则问题
最新推荐文章于 2024-07-10 21:37:49 发布