Leetcode: Valid Parenthesis

En este post te voy a explicar como resolví el problema: Valid Parenthesis de la plataforma Leetcode.

Primeros pasos.

Este ejercicio: Valid Parenthesis, es sencillo, necesitas recorrer la cadena de derecha a izquierda. Los elementos que no sean paréntesis abiertos y cerrados: (), [], {} se agregan a la pila. Cuando tienes un paréntesis abierto y cerrado del mismo tipo, eliminas el último valor de la pila. Si quedan más de un elemento en la pila, la cadena no es válida.

Solución.

using System;
using System.Collections.Generic;
using System.Linq;
public class Solution {
enum Action
{
AddToStack,
RemoveFromStack,
}
public static bool IsValid(string parenthesis)
{
var stack = new Stack<string>();
for (var i = parenthesis.Length - 1; i >= 0; i--)
{
var rightValue = parenthesis[i].ToString();
var leftValue = GetLefValue();
var action = GetAction(leftValue, rightValue);
ApplyAction(action, rightValue);
}
return stack.Count == 0;
Action GetAction(string left, string right)
{
return (left, right) switch
{
(")", "(") => Action.RemoveFromStack,
("}", "{") => Action.RemoveFromStack,
("]", "[") => Action.RemoveFromStack,
_ => Action.AddToStack
};
}
string GetLefValue() => stack.Any() ? stack.Peek() : string.Empty;
void ApplyAction(Action action, string rightValue)
{
switch (action)
{
case Action.AddToStack:
stack.Push(rightValue);
break;
case Action.RemoveFromStack:
_ = stack.Pop();
break;
}
}
}
public static void Main(string[] args)
{
Console.WriteLine(IsValid("((){}())"));
}
}

Gustavo Sánchez

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.

Site Footer