Java - 使用附加的“&”字符检查匹配的括号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 使用附加的“&”字符检查匹配的括号相关的知识,希望对你有一定的参考价值。
我写了一个函数来检查括号是否平衡,即{([])} 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;
}
答案
当你看到一个&
,并且堆叠的顶部是&
,然后弹出它,否则推动&
。
为了让你的代码处理它,而不是专门处理&
,只需交换代码来检查stack
之前的map
。
您的代码的其他问题:
Stack
类是一个遗留类,建立在同步的Vector
类之上。正如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 - 使用附加的“&”字符检查匹配的括号的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试真题Java实现括号匹配真题+解题思路+代码(2022&2023)
php 三元内联类检查 - 检查请求是否与特定字符串匹配,然后附加一个类(如果有)。