给定一个表达式字符串x。检查exp中{,},(,),[,]
的对和顺序是否正确。例如,对于exp = [()]{}{[()()]()}
,函数应返回'true',对于exp = [(])
,函数应返回'false'。
我用了一个数组列表来解决这个问题,但是我得到了一个数组索引OutOfBoundsException异常.
注意:它可以通过Stack实现,但我想知道使用我的方法的解决方案。
这就是我想做的:
class Solution {
//Function to check if brackets are balanced or not.
static boolean ispar(String x) {
int n = x.length();
boolean sol = false;
ArrayList < Character > store = new ArrayList < Character > ();
if (n % 2 != 0 && x.charAt(0) == ')' && x.charAt(0) == '}' && x.charAt(0) == ']') {
sol = false;
} else {
for (int i = 0; i < n; i++) {
if (x.charAt(i) == '[') {
store.add('[');
store.add(']');
}
if (x.charAt(i) == '{') {
store.add('{');
store.add('}');
}
if (x.charAt(i) == '(') {
store.add('(');
store.add(')');
}
if (x.charAt(i) == ')') {
store.remove(')');
store.remove('(');
}
if (x.charAt(i) == '}') {
store.remove('}');
store.remove('{');
}
if (x.charAt(i) == ']') {
store.add(']');
store.add('[');
}
}
if (store.size() == 0) {
sol = true;
}
}
return sol;
// add your code here
}
}
1条答案
按热度按时间0vvn1miw1#
这个问题的关键是迭代字符串,并在删除匹配对的同时跟踪左括号。在迭代结束时,存储应该是空的,表示所有的左括号都匹配: