题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
思路
借助栈来实现,首先判断括号数是否为偶数,若为奇数则肯定不能匹配,直接返回false。
若为偶数,则定义一个栈,根据括号依次进行入栈或出栈操作,规则为:若为左括号,则入栈;若为右括号,则让当前栈顶元素出栈,判断两者是否匹配,若不匹配返回false。
最后判断栈是否为空,若仍有剩余括号则不匹配,若为空则恰好两两配对,因此只需返回isEmpty() 的值即可。
代码
import java.util.Stack;
public class isValid {
public static void main(String[] args) {
String s="(]{}";
boolean res = isValid(s);
System.out.println(res);
}
static public boolean isValid(String s) {
if(s.length()%2 != 0)
return false;
Stack<Character> st = new Stack<Character>();
for(int i=0;i<s.length();i++){
char ch = s.charAt(i);
if(ch == '('||ch == '{'||ch == '['){
st.push(ch);
}else{
if(st.isEmpty())
return false;
char top = st.pop();
if(ch == ')' && top != '('){
return false;
}else if(ch == ']' && top != '['){
return false;
}else if(ch == '}' && top != '{') {
return false;
}
}
}
return st.isEmpty();
}
}