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; } }
解题思路:
注意事项:
参考代码:
0.0分
3 人评分
C语言训练-求函数值 (C语言代码)浏览:911 |
C语言训练-计算:t=1-1/(2*2)-1/(3*3)-...-1/(m*m) (C语言代码)浏览:780 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:574 |
C语言程序设计教程(第三版)课后习题6.5 (C++代码)浏览:447 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:697 |
Cylinder (C语言描述,蓝桥杯)浏览:1247 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
数列排序 (C语言代码)浏览:606 |
众数问题 (C语言代码)浏览:667 |
1392题解(大数相加)浏览:601 |