gpt4 book ai didi

Java - 检查带有附加 '&' 字符的匹配括号

转载 作者:行者123 更新时间:2023-12-02 01:55:58 25 4
gpt4 key购买 nike

我编写了一个函数来检查括号是否平衡,即 {([])} true,{(}) false。但我现在试图弄清楚如何解释与自身匹配的额外字符“&”,即 &{&&}& true,&{&} false。我尝试只计算“&”的数量,看看它是否是偶数,但这似乎不起作用。有什么想法吗?

public static boolean isBalanced(String input) {
if (input == null || input.length() == 1) return false;
int size = input.length();
if (size % 2 == 1) return false;

Stack<Character> stack = new Stack<Character>();
HashMap<Character, Character> map = new HashMap<Character,
Character>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');

for (int i = 0; i < size; i++){
char temp = input.charAt(i);
if (map.containsKey(temp)) stack.push(temp);
else if (stack.isEmpty() || map.get(stack.pop()) != temp)
return false;
}

return true;
}

最佳答案

当看到&,且栈顶是&时,则将其弹出,否则压入&

要让您的代码处理该问题,无需特殊处理 &,只需交换代码以在 map 之前检查 stack 即可。

代码的其他问题:

  • Stack类是一个遗留类,构建在同步 Vector 之上类(class)。正如 javadoc 所说,您应该使用 Deque相反。

  • 不要过多地折叠你的语句。将 if 控制的语句放在自己的行上,以提高人类可读性。

  • 不要使用 ==(或 !=)来比较对象,请使用 equals()

  • 您忘记在循环后检查堆栈是否为空,以确保没有悬空对。

public static boolean isBalanced(String input) {
if (input == null)
return false;
int size = input.length();
if (size % 2 == 1)
return false;

HashMap<Character, Character> map = new HashMap<>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
map.put('&', '&');

Deque<Character> stack = new ArrayDeque<>();
for (int i = 0; i < size; i++) {
Character temp = input.charAt(i); // autobox here so it only happens once
if (temp.equals(stack.peek())) // equals is false if stack is empty, since peek returns null
stack.pop();
else if (map.containsKey(temp))
stack.push(map.get(temp));
else
return false;
}

return stack.isEmpty();
}

测试

System.out.println(isBalanced("{([])}"));
System.out.println(isBalanced("{(})"));
System.out.println(isBalanced("&{&&}&"));
System.out.println(isBalanced("&{&}"));
System.out.println(isBalanced("(("));

输出

true
false
true
false
false

关于Java - 检查带有附加 '&' 字符的匹配括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52280797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com