我觉得题目有个条件没说清楚,就是不存在没有ABC这种没有括号的情况,必须是两两括号括起来;例如:((AB)C),(A(BC)),((AB)(CD))

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            int n = in.nextInt();//矩阵的个数
            int[][] arr = new int[n][2];
            for(int i=0;i<n;i++){
                arr[i][0] = in.nextInt();
                arr[i][1] = in.nextInt();
            }
            String s = in.next();
            int sum = 0;
            //从后往前遍历
            Stack<Integer> stack = new Stack<Integer>();
            for(int i=s.length()-1,j=n-1;i>=0;i--){
                if(Character.isLetter(s.charAt(i))){
                    stack.push(arr[j][1]);//先压列
                    stack.push(arr[j][0]);//再压行
                    j--;
                }else if(s.charAt(i) == '('){//遇到左括号,弹出栈顶的两个矩阵,计算之后再压栈
                    int x0 = stack.pop(),y0 = stack.pop();//先进后出,先出来的是行
                    int x1 = stack.pop(),y1 = stack.pop();
                    sum += x0 * y0 * y1;//此时y0和x1必然是相等的,否则两个矩阵不能运算
                    stack.push(y1);//先压列
                    stack.push(x0);
                }
            }
            System.out.println(sum);
        }
    }
}