余分なかっこを削除するには、Javaブルーブリッジカップの学習アルゴリズム
資源制約の
制限時間:512.0メガバイト:メモリ制限を1.0秒
問題説明
キーボード入力括弧を含む4演算式、ブラケットが削除過剰結果として、不変変数と演算子の相対的発現を維持するために元の位置を含んでいてもよいし、発現が前者と同等であり、必要とせず、必要な簡素化。さらにかかわらず、「+」は「 - 」記号として使用され、即ち、式の入力(+ A)または(-a)の場合は発生しません。
入力形式の
式の文字列、255の長さ、および空きスペース文字。乗算*その他/その他の演算符号-すべての変数は、単一の発現小文字の手紙、のみプラス+によってオペレータです。
出力形式
削除過剰後の括弧内の式
サンプル入力
サンプル:
A +(B + C)-d
サンプル2:
A + B /(C + D)
試料3:
(A * B)+ C / D
サンプル4:
((A + B )* F) - (I / J)
サンプル出力
サンプルA:
A + B + CDの
サンプル2:
A + B /(C + D)
試料3:
A * B + C / Dの
サンプル4:
(A + B)*部屋/ J
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sca=new Scanner(System.in);
String s=sca.next();
String str="";
int[] a=new int[s.length()];
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
if(a[i]==1) {
continue;
}
if(c=='(') {
boolean bo=true;
if(i-1>=0) {
if(s.charAt(i-1)=='*' || s.charAt(i-1)=='/' ) { //判断左括号前是否有乘除
bo=false;
}
}
if(!bo) {
continue;
}
int index=i+1;
int zuo=0;
boolean jian=true;
if(i-1>=0) {
if(s.charAt(i-1)=='-') {
jian=false;
}
}
while(true) { //找到匹配的右括号
if(!jian && s.charAt(index)=='+') { //判断左括号是-时,括号里有没有+
bo=false;
break;
}
if(s.charAt(index)==')' && zuo==0) {
break;
}
if(s.charAt(index)=='(') {
zuo++;
}
if(s.charAt(index)==')') {
zuo--;
}
index++;
}
if(!bo) {
continue;
}
boolean bo2=true;
if(index+1<s.length()) {
if(s.charAt(index+1)=='*' || s.charAt(index+1)=='/') { //判断右括号右边是否有乘除
bo2=false;
}
}
if(bo2) { //记录可以删除的括号位置
a[i]=1;
a[index]=1;
}
}
}
for(int i=0;i<s.length();i++) {
if(a[i]==0) {
str+=s.charAt(i);
}
}
System.out.println(str);
}
}