[Swift]LeetCode20. 有效的括號 | Valid Parentheses

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-xxafkfgs-me.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

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

An input string is valid if:github

  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:app

Input: "()"
Output: true

Example 2:ide

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

Example 3:code

Input: "(]"
Output: false

Example 4:htm

Input: "([)]"
Output: false

Example 5:blog

Input: "{[]}"
Output: true

給定一個只包括 '('')''{''}''['']' 的字符串,判斷字符串是否有效。rem

有效字符串需知足:

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字符串可被認爲是有效字符串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true

 
 1 class Solution {
 2     func isValid(_ s: String) -> Bool {
 3         //字符串爲空返回true
 4         if s.isEmpty
 5         {
 6             return true
 7         }
 8         else
 9         {
10             //或字符串的字符個數爲奇數個直接排除
11             if s.count%2==1
12             {
13                 return false
14             }
15         }
16         //建立字典對照表
17         var map:[Character:Character]=[")":"(","}":"{","]":"["]
18         //偶數符串若第一個字符就是右邊的符號則直接排除
19         if  map[s[s.startIndex]] != nil
20         {
21             return false
22         }
23         //建立字符串堆棧
24         var stackOfString=Stack<Character>()
25         //遍歷字符串
26         for char in s
27         {
28             //爲右側符號,且查詢字典對應堆棧中最後一個元素
29             if map[char] != nil && map[char]==stackOfString.GetLastElement()
30             {
31                 //出棧
32                 stackOfString.pop()
33             }
34             else
35             {
36                 //入棧
37                 stackOfString.push(char)
38             }
39         }
40         return stackOfString.count()==0
41     }
42     //堆棧的泛型通用版本
43     struct Stack<Element> {
44         var items = [Element]()
45         //入棧
46         //mutating 關鍵字修飾方法是爲了能在該方法中修改 struct 或是 enum 的變量
47         mutating func push(_ item: Element) {
48             items.append(item)
49         }
50         //出棧
51         mutating func pop() -> Element {
52             return items.removeLast()
53         }
54         //返回堆棧中的元素個數
55         mutating func count()->Int
56         {
57             return items.count
58         }
59         //獲取最後一個元素
60         mutating func GetLastElement()->Element
61         {
62             return items[items.count-1]
63         }
64     }
65 }

高效率版

 1 class Solution {
 2     func isValid(_ s: String) -> Bool {
 3         var opened = ""
 4         for char in s { 
 5             if char == "(" {
 6                 opened += ")" 
 7             } else if char == "{" {
 8                 opened += "}"
 9             } else if char == "[" {
10                 opened += "]"
11             } else {
12                 if let prevVal = opened.last, prevVal == char {
13                     opened.removeLast()
14                 } else {
15                     return false
16                 }
17             }
18         }
19         return opened.isEmpty
20     }
21 }
相關文章
相關標籤/搜索