Commit 14de6d5
committed
20. Valid Parentheses
```Solution.c bool isValid(char* s) { char stack[10000]; int top = -1; for (int i = 0; s[i]; i++) { if (s[i] == '(' || s[i] == '{' || s[i] == '[') { stack[++top] = s[i]; } else { if (top == -1) return false; char c = stack[top--]; if ((s[i] == ')' && c != '(') || (s[i] == '}' && c != '{') || (s[i] == ']' && c != '[')) { return false; } } } return top == -1; } ``` ```Solution.cpp class Solution { public: bool isValid(string s) { stack<char> stack; for (char c : s) { if (c == '(' || c == '{' || c == '[') { stack.push(c); } else { if (stack.empty()) return false; char top = stack.top(); stack.pop(); if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) { return false; } } } return stack.empty(); } }; ``` ```Solution.cs public class Solution { public bool IsValid(string s) { Stack<char> stack = new Stack<char>(); foreach (char c in s) { if (c == '(' || c == '{' || c == '[') { stack.Push(c); } else { if (stack.Count == 0) return false; char top = stack.Pop(); if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) { return false; } } } return stack.Count == 0; } } ``` ```Solution.dart class Solution { bool isValid(String s) { List<String> stack = []; for (var c in s.split('')) { if (c == '(' || c == '{' || c == '[') { stack.add(c); } else { if (stack.isEmpty) return false; var top = stack.removeLast(); if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) { return false; } } } return stack.isEmpty; } } ``` ```Solution.erl -spec is_valid(S :: unicode:unicode_binary()) -> boolean(). is_valid(S) -> Chars = unicode:characters_to_list(S), Pairs = #{ $) => $(, $] => $[, $} => ${ }, check(Chars, [], Pairs). check([], [], _Pairs) -> true; check([], _Stack, _Pairs) -> false; check([C | Rest], Stack, Pairs) -> case maps:get(C, Pairs, undefined) of undefined -> check(Rest, [C | Stack], Pairs); Open -> case Stack of [Open | Tail] -> check(Rest, Tail, Pairs); _ -> false end end. ``` ```Solution.ex defmodule Solution do @SPEC is_valid(s :: String.t) :: boolean def is_valid(s), do: match_brackets(s, []) defp match_brackets(<<?(, rest::binary>>, stack), do: match_brackets(rest, [?( | stack]) defp match_brackets(<<?[, rest::binary>>, stack), do: match_brackets(rest, [?[ | stack]) defp match_brackets(<<?{, rest::binary>>, stack), do: match_brackets(rest, [?{ | stack]) defp match_brackets(<<?), rest::binary>>, [?( | stack]), do: match_brackets(rest, stack) defp match_brackets(<<?], rest::binary>>, [?[ | stack]), do: match_brackets(rest, stack) defp match_brackets(<<?}, rest::binary>>, [?{ | stack]), do: match_brackets(rest, stack) defp match_brackets("", []), do: true defp match_brackets(_, _), do: false end ``` ```Solution.go func isValid(s string) bool { stack := []rune{} for _, c := range s { if c == '(' || c == '{' || c == '[' { stack = append(stack, c) } else { if len(stack) == 0 { return false } top := stack[len(stack)-1] stack = stack[:len(stack)-1] if (c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[') { return false } } } return len(stack) == 0 } ``` ```Solution.java class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for (char c : s.toCharArray()) { if (c == '(' || c == '{' || c == '[') { stack.push(c); } else { if (stack.isEmpty()) return false; char top = stack.pop(); if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) { return false; } } } return stack.isEmpty(); } } ``` ```Solution.js /** * @param {string} s * @return {boolean} */ var isValid = function(s) { const stack = []; for (const c of s) { if (c === '(' || c === '{' || c === '[') { stack.push(c); } else { if (stack.length === 0) return false; const top = stack.pop(); if ((c === ')' && top !== '(') || (c === '}' && top !== '{') || (c === ']' && top !== '[')) { return false; } } } return stack.length === 0; }; ``` ```Solution.kt class Solution { fun isValid(s: String): Boolean { val stack = mutableListOf<Char>() for (c in s) { if (c == '(' || c == '{' || c == '[') { stack.add(c) } else { if (stack.isEmpty()) return false val top = stack.removeAt(stack.size - 1) if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) { return false } } } return stack.isEmpty() } } ``` ```Solution.php class Solution { /** * @param String $s * @return Boolean */ function isValid($s) { $stack = []; foreach (str_split($s) as $c) { if ($c == '(' || $c == '{' || $c == '[') { array_push($stack, $c); } else { if (empty($stack)) return false; $top = array_pop($stack); if (($c == ')' && $top != '(') || ($c == '}' && $top != '{') || ($c == ']' && $top != '[')) { return false; } } } return empty($stack); } } ``` ```Solution.py class Solution: def isValid(self, s: str) -> bool: stack = [] for c in s: if c in '({[': stack.append(c) else: if not stack: return False top = stack.pop() if (c == ')' and top != '(') or \ (c == '}' and top != '{') or \ (c == ']' and top != '['): return False return len(stack) == 0 ``` ```Solution.rb # @param {String} s # @return {Boolean} def is_valid(s) stack = [] s.each_char do |c| if c == '(' || c == '{' || c == '[' stack.push(c) else return false if stack.empty? top = stack.pop return false if (c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[') end end stack.empty? end ``` ```Solution.rkt (define is-valid (lambda (s) (let ([pairs (make-hash)]) (hash-set! pairs #\) #\() (hash-set! pairs #\] #\[) (hash-set! pairs #\} #\{) (let loop ([chars (string->list s)] [stack '()]) (cond [(null? chars) (null? stack)] [else (define ch (car chars)) (cond [(member ch (list #\( #\[ #\{)) (loop (cdr chars) (cons ch stack))] [(hash-has-key? pairs ch) (and (not (null? stack)) (equal? (hash-ref pairs ch) (car stack)) (loop (cdr chars) (cdr stack)))] [else #f])]))))) (provide is-valid) ``` ```Solution.rs impl Solution { pub fn is_valid(s: String) -> bool { let mut stack = Vec::new(); for c in s.chars() { if c == '(' || c == '{' || c == '[' { stack.push(c); } else { if stack.is_empty() { return false; } let top = stack.pop().unwrap(); if (c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[') { return false; } } } stack.is_empty() } } ``` ```Solution.scala object Solution { import scala.collection.mutable def isValid(s: String): Boolean = { val stack = new Array[Char](s.length) val openBrackets = "({[" var result = true var index = 0 var stackIndex = 0 while (index < s.length && result) { val currentBracket = s.charAt(index) if(currentBracket == '(') { stack(stackIndex) = ')' stackIndex += 1 } else if (currentBracket == '{') { stack(stackIndex) = '}' stackIndex += 1 } else if (currentBracket == '[') { stack(stackIndex) = ']' stackIndex += 1 } else if(stackIndex > 0 && stack(stackIndex-1) == currentBracket) { stackIndex -= 1 } else { result = false } index += 1 } stackIndex == 0 && result } } ``` ```Solution.swift class Solution { func isValid(_ s: String) -> Bool { var stack: [Character] = [] for c in s { if c == "(" || c == "{" || c == "[" { stack.append(c) } else { if stack.isEmpty { return false } let top = stack.removeLast() if (c == ")" && top != "(") || (c == "}" && top != "{") || (c == "]" && top != "[") { return false } } } return stack.isEmpty } } ``` ```Solution.ts function isValid(s: string): boolean { const stack: string[] = []; for (const c of s) { if (c === '(' || c === '{' || c === '[') { stack.push(c); } else { if (stack.length === 0) return false; const top = stack.pop(); if ((c === ')' && top !== '(') || (c === '}' && top !== '{') || (c === ']' && top !== '[')) { return false; } } } return stack.length === 0; } ```1 parent 3aaf5be commit 14de6d5
File tree
19 files changed
+391
-0
lines changed- sol/solution/0001-0100/0020
19 files changed
+391
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
0 commit comments