[LintCode] Valid Parentheses

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

Example

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

This problem itself is pretty straightforward in developing a solution. Each time we try to check a parenthese pair,

we need to get the previous character that was just scanned, indicating a LIFO visit order. So we need to use the

stack data structure as follows.

1.  Each time we have a right side parenthese, we check the stack. If the stack is either empty or its top element is

not a matching left side parenthese, return false.

2. If we have a left side parenthese, simply push it to the stack.

3. After all characters have been iterated, check if the stack is empty. If empty, return true, otherwise return false.

 1 public class Solution {
 2     /**
 3      * @param s A string
 4      * @return whether the string is a valid parentheses
 5      */
 6     public boolean isValidParentheses(String s) {
 7         if(s == null){
 8             return false;
 9         }
10         if(s.length() == 0){
11             return true;
12         }
13         if(s.length() % 2 != 0){
14             return false;
15         }
16         Stack<Character> stack = new Stack<Character>();
17         int idx = 0;
18         while(idx < s.length()){
19             switch(s.charAt(idx)){
20                 case ‘)‘:
21                     if(stack.isEmpty() || stack.pop() != ‘(‘){
22                         return false;
23                     }
24                     break;
25                 case ‘}‘:
26                     if(stack.isEmpty() || stack.pop() != ‘{‘){
27                         return false;
28                     }
29                     break;
30                 case ‘]‘:
31                     if(stack.isEmpty() || stack.pop() != ‘[‘){
32                         return false;
33                     }
34                     break;
35                 default:
36                     stack.push(s.charAt(idx));
37                     break;
38             }
39             idx++;
40         }
41         return stack.isEmpty();
42     }
43 }

Runtime: O(n), BCR

Space complexity: O(n)

Both runtime and space complexity are optimal.

The following implementation is more concise with fewer duplicated code and easier to change if the input parentheses set has more options.

 1 public class Solution {
 2     public boolean isValidParentheses(String s) {
 3         if(s == null){
 4             return false;
 5         }
 6         if(s.length() == 0){
 7             return true;
 8         }
 9         if(s.length() % 2 != 0){
10             return false;
11         }
12         Stack<Character> stack = new Stack<Character>();
13         int idx = 0;
14         while(idx < s.length()){
15             char c = s.charAt(idx);
16             if(")}]".contains(String.valueOf(c))){
17                 if(!stack.isEmpty() && isMatch(stack.peek(), c)){
18                     stack.pop();
19                 }
20                 else{
21                     return false;
22                 }
23             }
24             else{
25                 stack.push(c);
26             }
27             idx++;
28         }
29         return stack.isEmpty();
30     }
31     private boolean isMatch(char c1, char c2){
32         return (c1 == ‘(‘ && c2 == ‘)‘) || (c1 == ‘{‘ && c2 == ‘}‘)
33             || (c1 == ‘[‘ && c2 == ‘]‘);
34     }
35 }
时间: 2024-10-29 10:45:45

[LintCode] Valid Parentheses的相关文章

[lintcode easy]Valid Parentheses

Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. Example The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]

423. Valid Parentheses【LintCode java】

Description Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. Example The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]"

32. Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example is &

LeetCode - 32. Longest Valid Parentheses

32. Longest Valid Parentheses Problem's Link ---------------------------------------------------------------------------- Mean: 给定一个由'('和')'组成的字符串,求最长连续匹配子串长度. analyse: 定义一个stack<pair<char,int>>类型的stack. 遇到'('进栈; 遇到')'需要分两种情况讨论: 栈顶元素为'(',正好匹配,

Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example is &

LeetCode:Valid Parentheses - 合理的括号搭配

1.题目名称 Valid Parentheses(合理的括号搭配) 2.题目地址 https://leetcode.com/problems/valid-parentheses/ 3.题目内容 英文:Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the

LeetCode之“动态规划”:Longest Valid Parentheses

题目链接 题目要求: Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another e

LeetCode: Longest Valid Parentheses O(n)时间 O(1)空间

题目: Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example

leetcode第31题--Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example is &