第一行输入两个整数
——初始字符串长度及操作次数。
第二行输入长度为
的字符串
,仅包含 `(`, `)` 与 `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();
}
}