★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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
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:
輸入: "()" 輸出: 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 }