const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; // 不是很复杂,但是本题的关键在于处理时间复杂度,直接使用原生API会导致时间超时,需要用指针方式替换,将时间复杂度降到 O(1) void (async function () { // Write your code here let params = []; while ((line = await readline())) { let tokens = line.split(" "); // let a = parseInt(tokens[0]); // let b = parseInt(tokens[1]); // console.log(a + b); params.push(tokens); } // console.log(params) let [n, k] = params[0]; let str_arr = params[1][0].split(""); let left = []; let right = []; // let pos = str_arr.findIndex((v) => v == "I"); // for (let i = 0; i < pos; i++) { // left.push(str_arr[i]); // } // for (let j = pos + 1; j < str_arr.length; j++) { // right.push(str_arr[j]); // } let i = 0; for (i = 0; i < str_arr.length; i++) { if (str_arr[i] != "I") { left.push(str_arr[i]); } else { break; } } for (let j = i + 1; j < str_arr.length; j++) { right.push(str_arr[j]); } // 使用指针而不是result 操作 let left_pointer = left.length; let right_pointer = 0; // console.log(left, right); for (let i = 0; i < k; i++) { // console.log(params[i+2][0]) let oper = params[i + 2][0]; if (oper == "backspace") { if ( left_pointer > 0 && left[left_pointer - 1] == "(" && right_pointer < right.length && right[right_pointer] == ")" ) { // right.shift(); left_pointer--; right_pointer++ } else if (left_pointer > 0) { // left.pop(); left_pointer-- } } else if (oper == "delete") { if (right_pointer<right.length) { // console.log('delete right') // right.shift(); right_pointer++ } } } console.log([...left.slice(0,left_pointer),'I',...right.slice(right_pointer)].join("")); })();