## 20. Valid Parentheses

Given a string `s` containing just the characters `'('`, `')'`, `'{'`, `'}'`, `'['` and `']'`, determine if the input string is valid.

An input string is valid if:

1. Open brackets must be closed by the same type of brackets.
2. Open brackets must be closed in the correct order.

Example 1:

```Input: s = "()"
Output: true
```

Example 2:

```Input: s = "()[]{}"
Output: true
```

Example 3:

```Input: s = "(]"
Output: false
```

Example 4:

```Input: s = "([)]"
Output: false
```

Example 5:

```Input: s = "{[]}"
Output: true
```

Constraints:

• `1 <= s.length <= 104`
• `s` consists of parentheses only `'()[]{}'`.

## Rust Solution

``````struct Solution;

impl Solution {
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(t) => {
if !((t == '{' && c == '}')
|| (t == '(' && c == ')')
|| (t == '[' && c == ']'))
{
return false;
}
}
None => {
return false;
}
},
_ => {}
}
}
stack.is_empty()
}
}

#[test]
fn test() {
assert_eq!(Solution::is_valid(String::from("()")), true);
assert_eq!(Solution::is_valid(String::from("()[]{}")), true);
assert_eq!(Solution::is_valid(String::from("(]")), false);
assert_eq!(Solution::is_valid(String::from("([)]")), false);
assert_eq!(Solution::is_valid(String::from("{[]}")), true);
}
``````

Having problems with this solution? Click here to submit an issue on github.