fn main() { let tests = vec![ ("()", true), ("()[]{}", true), ("([", false) ]; for test in tests { println!("{} is {} should be {}", test.0, is_valid(test.0.to_string()).to_string(), test.1) } } fn is_valid(s: String) -> bool { let mut stack: Vec = vec![]; for c in s.chars() { match c { '[' | '(' | '{' => stack.push(c), ']' | ')' | '}' => { match stack.pop() { Some(head) => if lookup(head).unwrap() != c {return false;}, None => return false } } _ => {} } } return stack.is_empty(); } fn lookup(c: char) -> Option { match c { '[' => Some(']'), '(' => Some(')'), '{' => Some('}'), _ => None } }