1. 題目描述
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
給定一個字符串,判斷字符串中包含的三種括號’(’ / ‘[’ / ‘{‘是否是成對的。
2. 解題思路
判斷括號是否成對使用一個棧即可。當括號爲左括號的時候入棧,右括號的時候出棧判斷是否匹配。但是其中還是有兩個坑,有坑就是因爲一開始沒想清楚就寫代碼(piapiapia該打)。一個就是當輸入一堆右括號的時候,出棧要判斷棧是否爲空。另一個就是當輸入一堆左括號的時候,如果出棧完成還有左括號在棧裏那麼也是不匹配的,如({{()[{}]這樣子的,最後棧裏還留下了({{,他並不是一個滿足要求的輸入。
3. Code
import java.util.Stack;
public class Solution {
public boolean isValid(String s) {
Stack<Integer> brackets = new Stack<>();
// 判斷一下是不是奇數長度,如果是,肯定不是一個正確結果
if(s.length()%2 != 0) return false;
for(int i = 0; i < s.length(); ++i)
{
char curc = s.charAt(i);
if(isLeft(curc)) brackets.push((int)curc);
else
{
// 坑1:}])...
if(brackets.isEmpty()) return false;
if(curc == ')')
{
if(brackets.pop() != '(') return false;
}
else if(curc == ']')
{
if(brackets.pop() != '[') return false;
}
else if(curc == '}')
{
if(brackets.pop() != '{') return false;
}
else
{
return false;
}
}
}
// 坑2: {([...
if(brackets.isEmpty()) return true;
return false;
}
private boolean isLeft(char c)
{
return c == '(' || c == '[' || c == '{';
}
}