https://atcoder.jp/contests/abc307/tasks/abc307_d
(の位置をstackにpushして、)があればpopして、その位置まで削除します。
// Mismatched Parentheses #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok(); line.trim().parse().ok().unwrap() } //////////////////// process //////////////////// fn read_input() -> String { let _N: usize = read(); let S: String = read(); S } fn f(S: String) -> String { let mut stack: Vec<usize> = Vec::new(); let mut cs: Vec<char> = Vec::new(); for c in S.chars() { match c { '(' => { stack.push(cs.len()); cs.push(c) }, ')' => match stack.pop() { None => cs.push(c), Some(p) => for _ in p..cs.len() { cs.pop(); } }, _ => cs.push(c) } } cs.into_iter().collect::<String>() } //////////////////// main //////////////////// fn main() { let S = read_input(); println!("{}", f(S)) }