题目描述:
给定一个字符串的格式如下:(a,(b,1),(2,(c,a),5)),括号内的元素可以是任意的数字或字母,也可以是一个括号。请实现一个算法用于消除表达式内嵌套的括号,例如将上面的表达式变为(a,b,1,2,c,a,5),如果表达式有误请报错。
思路:
利用栈的特点,遇到 左括号 ( ,则入栈;
遇到右括号 ) ,则出栈。注意出栈时检查栈是否为空。
import java.util.Scanner;
import java.util.Stack;
public class MyClass {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
Stack<Character> stack = new Stack<>();
String result = "(";
char [] c = str.toCharArray();
for(int i = 1; i < c.length - 1; i++)//注意i设置的起始位置和结束位置
{
if(c[i] == '(')
{
stack.push(c[i]);
}
else if(c[i] == ')') //如果遇到括号为")",且栈为空,则不匹配,打印错误
{
if(!stack.empty())
{
stack.pop();
}
else
{
System.out.println("error");
}
}
else
{
result += c[i];
}
}
if(!stack.empty())
{
System.out.println("error1");
}
else
{
result += ')';
System.out.println(result);
}
}
}
输出:
(a,b,1,2,c,a,5)