diff options
Diffstat (limited to 'valid-parentheses/src')
| -rw-r--r-- | valid-parentheses/src/main.rs | 39 | 
1 files changed, 39 insertions, 0 deletions
diff --git a/valid-parentheses/src/main.rs b/valid-parentheses/src/main.rs new file mode 100644 index 0000000..5ee7e96 --- /dev/null +++ b/valid-parentheses/src/main.rs @@ -0,0 +1,39 @@ +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<char> = 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<char> { +    match c { +        '[' => Some(']'), +        '(' => Some(')'), +        '{' => Some('}'), +        _ => None +    } +}  | 
