Skip to content

Commit

Permalink
feat: valid parentheses algorithm
Browse files Browse the repository at this point in the history
  • Loading branch information
francislagares committed Sep 4, 2023
1 parent da99e2e commit 37e36a5
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/algorithms/parentheses/parentheses.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/* es un evaluador de cadenas de parentesis */
/* recibe un string con parentesis y si los parentesis cierran correctamente devuelve true, como un analizador sintactico */

// isValidParentheses("()") // Output: true
// isValidParentheses("()[]{}") // Output: true
// isValidParentheses("(]") // Output: false
// isValidParentheses("([)]") // Output: false
// isValidParentheses("{[]}") // Output: true
// isValidParentheses("[") // Output: false

export const isValidParentheses = (str: string) => {
const stack = [];

// Creamos un mapa para mapear paréntesis de apertura a cierre
const map = {
'(': ')',
'[': ']',
'{': '}',
};

// Recorremos cada carácter en la cadena de entrada
for (const char of str) {
// Si el carácter es un paréntesis de apertura, lo agregamos a la pila
if (map[char]) {
stack.push(char);
} else {
// Si el carácter es un paréntesis de cierre
// verificamos si la pila está vacía o si el último paréntesis abierto no coincide
if (stack.length === 0 || map[stack.pop()] !== char) {
return false; // No coinciden los paréntesis
}
}
}

// Si la pila está vacía al final, todos los paréntesis se cerraron correctamente
return stack.length === 0;
};
25 changes: 25 additions & 0 deletions src/algorithms/parentheses/tests/parentheses.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { describe, test } from 'vitest';

import { isValidParentheses } from '../parentheses';

describe('Parentheses', () => {
test('isValidParentheses function is defined', () => {
expect(typeof isValidParentheses).toEqual('function');
});

test('"()" is a valid parentheses', () => {
expect(isValidParentheses('()')).toBeTruthy();
});

test('"([)]" is not a valid parentheses', () => {
expect(isValidParentheses('([)]')).toBeFalsy();
});

test('"[" is not a valid parentheses', () => {
expect(isValidParentheses('[')).toBeFalsy();
});

test('"()[]{}" is a valid parentheses', () => {
expect(isValidParentheses('()[]{}')).toBeTruthy();
});
});

0 comments on commit 37e36a5

Please sign in to comment.