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
解法一
设置一个判断是否为开括号的方法,设置一个得到对应闭括号的方法,然后遍历s。
public boolean isValid(String s) {
if(s==null||s.length()==0)
return true;
if(!isOpen(s.charAt(0)))
return false;
StringBuffer tmp=new StringBuffer();
for(int i=0;i<s.length();i++)
{
if(isOpen(s.charAt(i)))
tmp.append(symbol(s.charAt(i)));
else if(tmp.length()>0&&s.charAt(i)==tmp.charAt(tmp.length()-1))
tmp.deleteCharAt(tmp.length()-1);
else
return false;
}
return tmp.length()==0?true:false;
}
public Character symbol(char c)
{
switch(c)
{
case '(':
return ')';
case '{':
return '}';
case '[':
return ']';
default:
return null;
}
}
public boolean isOpen(char c){
if(c=='('||c=='{'||c=='[')
return true;
return false;
}
Runtime: 4 ms, faster than 98.12% of Java online submissions for Valid Parentheses.
Memory Usage: 37.3 MB, less than 9.65% of Java online submissions for Valid Parentheses.
解法二——用栈存储
和解法一差不多,不过使用了栈来存储更方便简洁
public boolean isValid(String s) {
if(s==null||s.length()==0)
return true;
if(!isOpen(s.charAt(0)))
return false;
Stack<Character> stack=new Stack<Character>();
for(int i=0;i<s.length();i++)
{
if(isOpen(s.charAt(i)))
stack.add(symbol(s.charAt(i)));
else if(!stack.isEmpty()&&s.charAt(i)==stack.peek())
stack.pop();
else
return false;
}
return stack.isEmpty()?true:false;
}
public Character symbol(char c)
{
switch(c)
{
case '(':
return ')';
case '{':
return '}';
case '[':
return ']';
default:
return null;
}
}
public boolean isOpen(char c){
if(c=='('||c=='{'||c=='[')
return true;
return false;
}
Runtime: 4 ms, faster than 98.12% of Java online submissions for Valid Parentheses.
Memory Usage: 37.2 MB, less than 10.41% of Java online submissions for Valid Parentheses.
要注意细节,仔细考虑特殊边界值,合理使用数据结构