第一行输入两个整数
——初始字符串长度及操作次数。
第二行输入长度为
的字符串
,仅包含 `(`, `)` 与 `I`,其中
恰好出现一次。
接下来
行,每行输入一个操作类型:backspace 或 delete。
输出一行字符串,表示所有操作结束后的括号串。
10 3 ((()(I))(( backspace backspace delete
(((I((
5 3 ((I)) backspace backspace delete
I
显然括号都被删除完了。
import java.util.*; import java.io.*; // I两侧存为两个双端队列进行操作 public class Main { public static void main(String[] args) throws IOException{ BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); String[] s=bf.readLine().split(" "); int n=Integer.parseInt(s[0]); int m=Integer.parseInt(s[1]); String input=bf.readLine(); int indexI=input.indexOf('I'); Deque<Character> d1=new LinkedList<>(); Deque<Character> d2=new LinkedList<>(); for(int i=0;i<n;i++){ if(i<indexI){ d1.offerLast(input.charAt(i)); } if(i>indexI){ d2.offerLast(input.charAt(i)); } } while(m>0){ if("backspace".equals(bf.readLine())){ if(!d1.isEmpty()&&!d2.isEmpty()&&d1.peekLast()=='('&&d2.peekFirst()==')'){ d1.removeLast(); d2.removeFirst(); } else{ d1.pollLast(); } }else{ d2.pollFirst(); } m--; } for(char c:d1){ System.out.print(c); } System.out.print('I'); while(d2.peekFirst()!=null) { System.out.print(d2.pollFirst()); } System.out.println(); } }