我编写了一个函数来检查括号是否平衡,即{([])}为真,{(})为false。但是我现在试图弄清楚如何说明一个与自身匹配的额外字符'&',即&{&&}&true,&{&} false。我尝试仅计算“&”的数量以查看是否为偶数,但这似乎行不通。有什么想法吗?
import pyspark.sql.functions as F
averages = df.groupBy("Class").agg(F.avg("Age").alias("avgAge"))
df_with_avgs = df.join(averages, on="Class")
imputed_df = df_with_avgs.withColumn("imputedAge", F.coalesce("Age", "avgAge"))
答案 0 :(得分:2)
当您看到&
,并且堆栈顶部是&
时,请弹出它,否则推入&
。
要让您的代码处理此问题而无需特别对待&
,只需交换代码以在stack
之前检查map
。
代码的其他问题:
不要将您的陈述折叠得太多。将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