Roadmap › Coding Round Practice (DSA in C#) › Module: Stacks, Queues and Linked Lists
Lessons in this course (14)
7. Stack problems
Intermediate★ Must knowLesson 7 of 14
csharp
// Valid parentheses — O(n)
static bool IsValid(string s)
{
var stack = new Stack<char>();
var pairs = new Dictionary<char, char> { [')'] = '(', [']'] = '[', ['}'] = '{' };
foreach (var c in s)
{
if (pairs.ContainsValue(c)) stack.Push(c);
else if (pairs.TryGetValue(c, out var open))
{
if (stack.Count == 0 || stack.Pop() != open) return false;
}
}
return stack.Count == 0;
}
// Next greater element — monotonic stack O(n)
static int[] NextGreater(int[] a)
{
var result = Enumerable.Repeat(-1, a.Length).ToArray();
var stack = new Stack<int>(); // indexes waiting for a greater value
for (int i = 0; i < a.Length; i++)
{
while (stack.Count > 0 && a[stack.Peek()] < a[i]) result[stack.Pop()] = a[i];
stack.Push(i);
}
return result;
}