Java的栈真的是一个很有用的东西
使用stack来判断一个字符串的括号是不是配对呢?比如:
[] true
(){[]}{} true
[ false
看代码吧:
import java.util.Stack;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class Parentheses {
private static final char LEFT_PAREN='(';
private static final char RIGHT_PAREN=')';
private static final char LEFT_BRACE='[';
private static final char RIGHT_BRACE=']';
private static final char LEFT_BRACKET='{';
private static final char RIGHT_BRACKET='}';
public static boolean isBalanced(String s)
{
Stack<Character> stack=new Stack<Character>();
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)==LEFT_PAREN||s.charAt(i)==LEFT_BRACE||s.charAt(i)==LEFT_BRACKET)
stack.push(s.charAt(i));
if(s.charAt(i)==RIGHT_PAREN)
{
if(stack.isEmpty()) return false;
if(stack.pop()!=LEFT_PAREN) return false;
}
if(s.charAt(i)==RIGHT_BRACE)
{
if(stack.isEmpty()) return false;
if(stack.pop()!=LEFT_BRACE) return false;
}
if(s.charAt(i)==RIGHT_BRACKET)
{
if(stack.isEmpty()) return false;
if(stack.pop()!=LEFT_BRACKET) return false;
}
}
return stack.isEmpty();
}
public static void main(String[] args)
{
// In in=new In();
// String s=in.readAll().trim();
//
while(!StdIn.isEmpty())
{
String s=StdIn.readString();
StdOut.println(isBalanced(s));
}
}
}
输入:
{{{}()()}}
返回:
true