《算法4》课后题目中,有一道题:编写一道程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入: 1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) ) 你的程序应该输出: ((1 + 2) * ((3 - 4) * (5 - 6)))
网上有关这道题目,实现的基本都是左括号匹配,对于右括号匹配,未能找到答案。如果考虑操作符优先级的话,题目给出的预期结果,也只是其中一种结果,还有其他的匹配结果。自己实现一个算法,匹配括号,带操作符优先级。代码如下,供大家学习参考。
package com.sylar;
import java.util.Stack;
/**
* 表达式括号匹配
*
*/
public class ExpressBracketMatch {
//操作符优先级定义
final static String OPERATOR_PRIORITY[] = new String[]{"+-", "*/", "^"};
/**
* 表达式匹配
*
* @param express 表达式参数,可以包含空格
* @return
*/
public static String match(String express) {
String newExpress = express.replaceAll(" ", "");
Stack<String> operStack = new Stack<>();
Stack<String> dataStack = new Stack<>();
for (int i = 0; i < newExpress.length(); i++) {
String ss = String.valueOf( newExpress.charAt(i) );
if (isDigit(ss.charAt(0))) {

本文介绍了一种算法,用于解决算法4课程中的一道题目,即从标准输入获取一个缺少左括号的表达式,并打印出补全括号后的中序表达式。算法考虑了操作符优先级,通过使用两个栈(操作数栈和操作符栈)来匹配括号,实现了右括号的匹配。提供了完整的Java代码实现和多个测试用例。
最低0.47元/天 解锁文章
2107

被折叠的 条评论
为什么被折叠?



