我在hackerrank里面玩,我试过一个关于平衡括号的问题。
问题:给定一个由左括号和右括号组成的字符串,“(”和“)”,根据需要插入括号来平衡括号。确定必须插入的最小字符数。只需返回必须插入的括号数。而且字符串将只包含括号(这就是为什么我没有特别检查右括号)
我的思维过程:确定开括号和闭括号的数目。返回两者之差的绝对值。不幸的是,它失败了两个测试用例,我不知道为什么。
我的解决方案
public static int getMin(String s) {
// Write your code here
int leftPar = 0;
int rightPar = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ')') {
rightPar++;
}
else {
leftPar++;
}
}
return Math.abs(rightPar - leftPar);
}
我的解决方案有什么问题导致它在某些情况下失败?
有效的黑客银行解决方案:
public static int getMin(String s) {
// Write your code here
int bal = 0;
int ans = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') bal++;
else bal--;
if (bal == -1) {
ans++;
bal++;
}
}
return bal + ans;
}
样本输入:
pars = "()))))))))))))))))))))))()()))()))))))))()))))))()))()))))(()))))))))))))()))))))(()))))))))()()))))))))))))()))))(())()))))))(()))))()))))))()))()())))())))))))))))()))())(()()())()()())))))()))))())()))()))))))))))))))()())))()))))()))))))()))())()))())))(()))()))))))))())))())))(())()))))()((()))))))((((()())())())(())))))())())))))))())))))()(()))))()))))())))))()())())()))()))))))))()))))))))))()))))())))))(((()))))()))((())))())))))))())))()()())())))))())))())())))))(())())))))))())))()()))))))))))))(())())())))((()))))))(())))()())))()))))(())))(())))))))))))))(())))(())()))))(()))())())))))))()())(()(())())))))))))))))))))))))))((()())))())))())))((()())))()))())()))))())()())))))))))))(()))))))))))))))()))))))()))))))))))))))))(()(()))(()))()))))))()))()()))))))))))()))())()))))())))()()()))()))))(())))))))))))))()()))))(())))()))))))()))()())()))())()())())))()()(()())))))()())))))))())))())))(())))())))))))()))))))))()((()(())))))))))(())))())))())))))))))()())))()))))))))("
暂无答案!
目前还没有任何答案,快来回答吧!