如果字符串中的每个开口括号都可以与后面的结束括号配对,则认为括号字符串是正确匹配的,反之亦然。例如,“(())()”是正确匹配的,而“)(”和“(”不是“)(例如,”(“)”可以通过在末尾添加两个尾括号来正确匹配,因此您将返回2。
给定一个由括号组成的字符串,编写一个函数bracketMatch,它以一个括号字符串作为输入,并返回您需要添加到输入中以使其正确匹配的最少括号数。
我的方法:
import java.io.*;
import java.util.*;
class Solution {
static int bracketMatch(String text) {
// your code goes here
//Maintain 2 variables
int ob = 0;//ob
int cb = 0;//cb
int wb= 0;//wb
for( int i = 0; i < text.length(); i++ )
{
//Check for openBracket
if( text.charAt(i) == '(')
ob++;
//Check for closeBracket
if( text.charAt(i) == ')')
cb++;
//Check if closeBracketct > openBracketct
if( cb > ob )
{
wb++;
ob = 0;
cb = 0;
}
}
return (wb + (ob - cb));
}
public static void main(String[] args) {
//System.out.println(bracketMatch("())("));
//System.out.println(bracketMatch("(((())))"));
System.out.println(bracketMatch("(((())"));
// System.out.println(bracketMatch("))))"));
}
}
关于上述代码,我有几个问题:
1)如何进一步优化这段代码?
2)我是否使用了太多的变量?
( 3)有没有比我的更好的方法?
发布于 2018-07-15 11:35:46
我们不需要关闭变量,如果我们可以减少1打开时,近括号是找到。
public class MatchBrackets{
public static int matchBrackets(String brackets){
int open = 0;
int count =0;
for(int i=0;i<brackets.length();i++){
if(brackets.charAt(i)=='('){
open++;
}else if(brackets.charAt(i)==')'){
open--;
}
if(open<0){
count++;
open++;
}
}
return count+open;
}
public static void main(String[] args) {
System.out.println(matchBrackets("())("));
System.out.println(matchBrackets("(((())))"));
System.out.println(matchBrackets("))))"));
}}
https://codereview.stackexchange.com/questions/186719
复制相似问题