题目描述
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
示例1
输入
"["
返回值
false
示例2
输入
"[]"
返回值
true
import java.util.Stack;
public class IsValidString {
public static void main(String[] args) {
String str = "main...";
String sign = "([)]"; // false
sign = "{[()]}"; // true
// sign = "{[()]})"; // false
//sign = "{[()]}("; // false
IsValidString isValidString = new IsValidString();
boolean result = isValidString.isValid(sign);
System.out.println(result);
}
// 下面的写法更为简洁
public boolean isValid (String s) {
// write code here
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.empty()||stack.pop()!=c)
return false;
}
return stack.empty();
}
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid1 (String s) {
Stack stack = new Stack();
if(null == s || s.length() == 1){
return false;
}
for(int i=0;i<s.length();i++){
char ch = s.charAt(i);
// 如果是左括号,就入栈
if(ch == '(' || ch == '[' || ch == '{' ){
stack.push(ch);
}else{
// 如果栈为空,说明找到匹配的符号,返回false
if(stack.isEmpty()){
return false;
}else{
char top = (char)stack.pop();
if((top == '(' && ch == ')') || (top == '[' && ch == ']') || (top == '{' && ch == '}') ){
// 括号和栈顶括号匹配,继续遍历下一个括号
continue;
}else{
// 括号和栈顶括号不匹配,直接返回false
return false;
}
}
}
}
// 如果栈最终为空,说明括号全部匹配,返回true,否则返回false
return stack.isEmpty() ? true : false;
}
}