> For the complete documentation index, see [llms.txt](https://frost.gitbook.io/iosbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://frost.gitbook.io/iosbook/leet-code/leetcode-solutions/20.-valid-parentheses.md).

# \[LeetCode] 20. Valid Parentheses

Given a string 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.

Note that an empty string is also considered valid.

**Example 1:**

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

**Example 2:**

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

**Example 3:**

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

**Example 4:**

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

**Example 5:**

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

**Analyse:**

​

**Solution:**

```swift
class Solution {
    func isValid(_ s: String) -> Bool {
          let leftChars:[Character] = ["(", "{", "["];
        let rightChars:[Character] = [")", "}", "]"];
        
        var stack:[Character] = [];
        let chars = Array(s);
        
        
        if(chars.count % 2 != 0) {
            return false;
        }
        
        for i in 0..<chars.count {
            let char = chars[i];
            
            if(leftChars.index(of:char) != nil) {
                stack.append(char);
            }
            else if(rightChars.index(of:char) != nil) {
                
                if(stack.count == 0) {
                    return false;
                }
                   
                if(leftChars.index(of:stack.last!) == rightChars.index(of:char)) {
                    stack.removeLast();
                }
                else {
                    return false;
                }
            }
        }
        
        if(stack.count == 0) {
            return true;
        }
        
        return false;
    }
}
```
