我发现了一个问题,我尝试了我的逻辑,但我没有找到解决方案。
这是我试图在java中解决的问题。
对于每个左大括号(即(,{,或[),都有相同类型的匹配右括号(即,),}或])(即(匹配),{匹配},和[ 火柴 ])。开口支撑必须出现在它匹配的闭合支撑之前(左侧)。例如,] {} [不平衡。
在一对匹配的牙套之间没有无与伦比的牙套。例如,({[]})是平衡的,但{[}]和[{)]不平衡。
我想编写一个java代码,它会接受大括号的输入并输出是否平衡。
我无法为这种代码应用逻辑,但我试过它甚至没有接近预期。请提供一些逻辑。我知道这不是一个家庭作业完成网站,但我坚持这个问题的逻辑。一段代码片段将不胜感激。
答案 0 :(得分:5)
这与java无关。您需要使用堆栈来跟踪遇到括号的顺序。
算法 -
答案 1 :(得分:2)
试试这个。
public static boolean isBalanced(String s) {
Deque<Character> stack = new LinkedList<>();
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (c == '(')
stack.push(')');
else if (c == '[')
stack.push(']');
else if (c == '{')
stack.push('}');
else if (c == ')' || c == ']' || c == '}')
if (stack.isEmpty() || !stack.pop().equals(c))
return false;
}
return stack.isEmpty();
}
没有开关版本:
Database.database.goOnline()
答案 2 :(得分:0)
解决此问题的另一种方法。
这可以使用Stack Datastructure解决。
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String string = in.next(); //input string -> eg : {{[[(())]]}}
boolean check = Paran(string);
if(check){
System.out.println("YES");
}
else{
System.out.println("NO");
}
}
//function that checks brackets are balanced or not
public static boolean Paran(String string){
//create a stack
Stack<Character> s = new Stack<Character>();
//check if string is empty
//if string is empty then Balanced
if(string.length() == 0){
return true;
}
//if string is not empty, go through each character
for(int i = 0; i< string.length(); i++){
//fetch each character
char current = string.charAt(i);
//check if that character id any of {([
// if yes push on to the stack
if(current == '[' || current == '{' || current == '('){
s.push(current);
}
//check if that character id any of }])
if(current == '}' || current == ']' || current == ')'){
//check stack is empty
//if yes then return false
if(s.isEmpty()){
return false;
}
//else fetch top most item
char pre = s.peek();
if((current == '}' && pre == '{') || (current == ']' && pre == '[') || (current == ')' && pre == '(')){
s.pop();
}
else{
return false;
}
}
}
return s.isEmpty();
}
}
希望这有帮助