diff --git a/swift/0020-valid-parentheses.swift b/swift/0020-valid-parentheses.swift index f7c8c4006..abbb24244 100644 --- a/swift/0020-valid-parentheses.swift +++ b/swift/0020-valid-parentheses.swift @@ -1,47 +1,23 @@ class Solution { + // Input: s = "()[]{}" func isValid(_ s: String) -> Bool { - let parenMap:[Character:Character] = ["(":")", "[":"]", "{":"}"] - var stack = Stack() - for c in s { - if parenMap.keys.contains(c) { - stack.push(c) - } else if stack.isEmpty || c != parenMap[stack.pop()!] { - return false + let closeToOpenDic: [Character:Character] = [ + "}": "{", + ")": "(", + "]": "["] + var stack = [Character]() + for char in s { + for char in s { + let c = closeToOpenDic[char] + if c == nil { + stack.append(char) + }else{ + if stack.popLast() != c { + return false + } + } } } - return stack.isEmpty - } -} - -class Node { - var data: T - var next: Node? - init(_ value: T) { - self.data = value - } -} - -class Stack { - - var head: Node? - - var isEmpty: Bool { - head == nil - } - - func peak() -> Node? { - head - } - - func push(_ data: T) { - var node = Node(data) - node.next = head - head = node - } - - func pop() -> T? { - var data = head?.data - head = head?.next - return data + return stack.count == 0 } }