这是 C# 中针对 Leetcode 上此问题的最佳解决方案之一。有人可以解释为什么堆栈在不使用 Pop() 的情况下最后变空吗?
bool testen(string s)
{
// Get ready initial state (enforce element type)
var k = new Stack<char>();
// Evaluate each character for potential mismatch
foreach (char c in s)
{
// Push closing round bracket onto the stack
if (c == '(') { k.Push(')'); continue; }
// Push closing curly bracket onto the stack
if (c == '{') { k.Push('}'); continue; }
// Push closing square bracket onto the stack
if (c == '[') { k.Push(']'); continue; }
// Look out for imbalanced strings or mismatches
if (k.Count == 0 || c != k.Pop()) return false;
}
// Empty stack means string is valid and invalid otherwise
return k.Count == 0;
}
堆栈不会"在最后变空";当提供的字符串确实满足填充它的任何条件时,它为空。
基本上,k
是c
的镜像,而又是s
的人物表现。如果s
不包含(
、{
或[
,那么k
将永远不会被填充,因此k
将返回空,因为它最初被设置为带有var k = new Stack<char>()
的空堆栈。
第四个条件只是确保k
的长度等于c
的长度。这个条件是完全多余的,因为如果k.Count
0
,外部return
语句将返回false
。