java - 使用 ArrayList 作为堆栈来验证元素对(得到异常结果)

标签 java arraylist stack

以下 boolean 方法确定(99% 的时间!)由各种括号组成的给定字符串是否“平衡”,即。如此排序的括号将构成有效的语法安排。括号被单独输入到 ArrayList 中,然后 ArrayList 充当堆栈,删除出现在列表末尾的有效对。然后空列表返回 true,表示“平衡”安排。

我的问题是,为什么以下“不平衡”输入......

([])({)}

返回真?

如果有人愿意花时间理解这个问题,我将非常感激。

public static boolean isBalanced(String e) {
    char a[] = e.toCharArray();
    ArrayList<Character> b = new ArrayList<Character>();
    for (int i = 0; i<a.length; i++){
       b.add(a[i]);
       while (b.size() >= 2 && ((b.get(b.size()-2)=='(' && b.get(b.size()-1)==')') || (b.get(b.size()-2)=='[' && b.get(b.size()-1)==']') || (b.get(b.size()-2)=='{' && b.get(b.size()-1)=='}'))){
           b.remove(b.size()-2);
           b.remove(b.size()-1);
        }             
        if (b.isEmpty()){
            return true;
        }
    }
        return false;
    }

最佳答案

因为检查( [ ] )后即。 i=3 条件 b.isEmpty() 为 true。

将条件更改为:

if (b.isEmpty() && i == a.length - 1) {
    return true;
}

关于java - 使用 ArrayList 作为堆栈来验证元素对(得到异常结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48787815/

相关文章:

java - ArrayList 上神秘的 Android(Java) 错误

java - 将文本文件中的数字输入到 ArrayList 中,同时计算每个数字的出现次数

c++ - STL 堆栈对象的大小限制

java - 'One to many mapping' 场景中子实体的 findById 操作返回递归子实体。需要解决方案

java - Apache Ignite Eviction 在 2.x 中被破坏,但在 1.9 中工作正常

java - 如何将 Set<Set> 转换为 ArrayList<ArrayList>

c++ - 堆栈链接错误问题

c# - C#中如何删除不在栈顶的栈项

java - 如何将Java代码转换为mapreduce?

用于 Avaya IVR 和 CTI 集成的 Java 客户端