summaryrefslogtreecommitdiff
path: root/valid-parentheses/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'valid-parentheses/src/main.rs')
-rw-r--r--valid-parentheses/src/main.rs39
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
+ }
+}