所以我所拥有的是这个稍微修改过的代码版本,对于Java Stack Balancing来说是一百次。
import java.util.Stack;
public class Main {
public static String testContent = "{(a,b)}";
public static void main(String args[])
{
System.out.println(balancedParentheses(testContent));
}
public static boolean balancedParentheses(String s)
{
Stack<Character> stack = new Stack<Character>();
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if(c == '[' || c == '(' || c == '{' )
{
stack.push(c);
}else if(c == ']')
{
if(stack.isEmpty()) return false;
if(stack.pop() != '[') return false;
}else if(c == ')')
{
if(stack.isEmpty()) return false;
if(stack.pop() != '(') return false;
}else if(c == '}')
{
if(stack.isEmpty()) return false;
if(stack.pop() != '{') return false;
}
}
return stack.isEmpty();
}
}
我想要做的是自定义输出,使其输出类似“平衡”或“不平衡”的内容而不是真/假。试图替换return false;使用包含'balanced'的System.println给了我很多我不想要的输出行。一直在这里搜索大约一个小时和一些变化,并没有找到我正在寻找的答案。有什么见解吗?
答案 0 :(得分:1)
您可以使用类似
的内容 System.out.println(balancedParentheses(testContent) ? "balanced" : "imbalanced");
或者如果你想要一个返回String的方法用另一个方法包装逻辑
String isBalanced(String expression) {
return balancedParentheses(expression) ? "balanced" : "imbalanced"
}
并在main()
中System.out.println(isBalanced(testContent));
你可以编写像这样的代码
public static boolean balancedParentheses(String s) {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '[' || c == '(' || c == '{') {
stack.push(c);
} else if (c == ']' || c == ')' || c == '}') {
if (stack.isEmpty() || !matches(stack.pop(), c))
return false;
}
}
return stack.isEmpty();
}
private static boolean matches(char opening, char closing) {
return opening == '{' && closing == '}' ||
opening == '(' && closing == ')' ||
opening == '[' && closing == ']';
}