思路:括号匹配,每当出现右括号时,都和左边最近的进行匹配,如果能匹配,则消除,否则,则为不匹配。操作顺序符合栈的特点。
代码:
public class ValidParentheses20 {
public static void main(String[] args) {
String s = "([])[{}()(())]";
System.out.println(isValid(s));
}
public static boolean isValid(String s) {
Stack<Character> stack = new Stack();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if(ch=='('||ch=='['||ch=='{')
stack.push(ch);
else if(ch==')'||ch==']'||ch=='}')
{
//从栈中取元素时,需要先判断栈是否为空
if(stack.empty())
return false;
char c = stack.pop();
if(!((c=='('&&ch==')')||(c=='['&&ch==']')||(c=='{'&&ch=='}')))
return false;
}
}
if(!stack.empty())
return false;
return true;
}
}
输出:true