[Swift]LeetCode20. 有效的括号 | Valid Parentheses
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9697906.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- 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
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 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 }

浙公网安备 33010602011771号