Skip to content

Commit 59104e4

Browse files
Merge pull request codemistic#614 from tiger3768/stjava
Add : Balanced Brackets and InfixToPrefix program in Java
2 parents 2afd88f + b9880e6 commit 59104e4

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

Java/Stack/BalancedBrackets.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//Program to check for Balanced Brackets in Java
2+
3+
import java.util.Stack;
4+
5+
public class BalancedBrackets {
6+
public static boolean isBalanced(String expression) {
7+
Stack<Character> bracketStack = new Stack<>();
8+
int n = expression.length();
9+
for(int i = 0 ; i < n ; i++){
10+
char bracket = expression.charAt(i);
11+
if(isNotB(bracket)) continue;
12+
if(isOpeningB(bracket)) bracketStack.push(bracket);
13+
else{
14+
if(!bracketStack.isEmpty() && validOpeningB(bracket) != bracketStack.peek()) return false;
15+
else bracketStack.pop();
16+
}
17+
}
18+
return bracketStack.isEmpty();
19+
}
20+
static boolean isNotB(char bracket){
21+
return !("(){}[]".contains(bracket + ""));
22+
}
23+
static boolean isOpeningB(char bracket){
24+
return "({[".contains(bracket + "");
25+
}
26+
static char validOpeningB(char bracket){
27+
if(bracket == ')') return '(';
28+
if(bracket == '}') return '{';
29+
if(bracket == ']') return '[';
30+
return '\0';
31+
}
32+
}

Java/Stack/InfixToPrefix.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//Java Program to convert Infix Expression to Prefix
2+
import java.util.Stack;
3+
4+
public class InfixToPrefix {
5+
public static void main(String[] args) {
6+
System.out.println("1+2+3 -> " + infix2Prefix("1+2+3"));
7+
System.out.println("A^B-(C+D) -> " + infix2Prefix("A^B-(C+D)"));
8+
System.out.println("(P/L+(F*J) -> " + infix2Prefix("(P/L+(F*J)"));
9+
}
10+
public static String infix2Prefix(String expression){
11+
if(!BalancedBrackets.isBalanced(expression)) return "Invalid Expression";
12+
Stack<Character> operatorStack = new Stack<>();
13+
StringBuilder prefixExpression = new StringBuilder();
14+
int n = expression.length();
15+
for(int i = n - 1 ; i >= 0 ; i--){
16+
char scanned = expression.charAt(i);
17+
if(Character.isLetterOrDigit(scanned)) prefixExpression.append(scanned);
18+
else if(scanned == ')') operatorStack.push(scanned);
19+
else if(scanned == '('){
20+
while(!operatorStack.isEmpty() && operatorStack.peek() != ')'){
21+
prefixExpression.append(operatorStack.pop());
22+
}
23+
if(!operatorStack.isEmpty()) operatorStack.pop();
24+
}
25+
else if(operatorStack.isEmpty() || operatorStack.peek() == ')') operatorStack.push(scanned);
26+
else{
27+
while(!operatorStack.isEmpty() && precedence(operatorStack.peek()) < precedence(scanned)){
28+
prefixExpression.append(operatorStack.pop());
29+
}
30+
operatorStack.push(scanned);
31+
}
32+
}
33+
while(!operatorStack.isEmpty()) prefixExpression.append(operatorStack.pop());
34+
return prefixExpression.reverse().toString();
35+
}
36+
static int precedence(char operator){
37+
if(operator == '^') return 3;
38+
if(operator == '*' || operator == '/') return 2;
39+
if(operator == '+' || operator == '-') return 1;
40+
return 0;
41+
}
42+
}

0 commit comments

Comments
 (0)