*LeetCode--Valid Parentheses
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
自己的做法:因为不想一个一个分情况,所以考虑用map来进行数据的配对,然后用stack来进行符号的记录,
当前字符是左半边的符号时,入栈,
是右半边的符号时,进行对比,如果stack.peek()和它的另外一半相同,则出栈,否则返回false
最后,如果stack为空,则为true,否则为false
但是,事实证明,用map来装字符进行配对时的比较是错误的决定,这样会使得问题更加繁琐。
class Solution {
public boolean isValid(String s) {
if(s == null || s.length() == 0) return true;
Stack<Character> stack = new Stack<>();
Map<Character, Character> map = new HashMap<>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
String str = "[{(";
for(int i = 0; i < s.length(); i++){
char temp = s.charAt(i);
if(map.get(temp) != null){
if(str.contains(String.valueOf(temp))){
stack.push(temp);
} else{
if(!stack.empty() && stack.peek() == map.get(temp)){
stack.pop();
} else{
return false;
}
}
} else{
return false;
}
}
if(!stack.empty()) return false;
return true;
}
}
discuss上的解法
只利用栈,然后将可能性列出来
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if (c == '(')
stack.push(')');
else if (c == '{')
stack.push('}');
else if (c == '[')
stack.push(']');
else if (stack.isEmpty() || stack.pop() != c)
return false;
}
return stack.isEmpty();
}
还可以利用replace()方法
public class Solution {
public boolean isValid(String s) {
int length;
do {
length = s.length();
s = s.replace("()", "").replace("{}", "").replace("[]", "");
} while(length != s.length());
return s.length() == 0;
}
}

浙公网安备 33010602011771号