关于编译器和文本编辑器的一个共同的问题:确定字符串中的括号是否平衡和正确嵌套。
例如,字符串”((())())()”包含正确嵌套双括号,其中所述字符串),(),(和())没有正确匹配。给出了一个算法, 如果一个字符串包含正确的嵌套和平衡括号则返回匹配括号的个数,否则返回-1。给出一个字符串”(()(()))”输出的结果是包含正确的嵌套和平衡括号的个数4。给出字符串”(()”,则返回-1。
import java.util.Stack;
public class 括号平衡和正确嵌套 {
public static char LeftParenthesis = '(';
public static char RightParenthesis = ')';
public static void main(String[] args) {
String string = "(()(()))";
//String string = "(()";
System.out.println(AreParenthesesBalanced(string));
}
public static int AreParenthesesBalanced(String str)
{
int count = 0;//匹配的括号的个数
Stack<Integer> items = new Stack();
int left = 0;//统计左括号的个数
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
if (c == LeftParenthesis){
items.push((int)str.charAt(i));
count ++;
left++;
}
else if (c == RightParenthesis)
{
items.pop();
left--;
}
}
if(left != 0){
return -1;
}
return count;
}
}