Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

240
Vistas
Clasificación con una sola pila y argumentos de cambio en Java

Estoy tratando de escribir 2 métodos que pueden ordenar una cadena de corchetes usando solo 1 declaración de pila y 1 cambio. No puedo hacer que funcione, me pregunto si puede deberse a casos de '' en cadenas. ¿No debería el caso predeterminado recoger estos o he entendido mal las declaraciones de cambio? Aquí es donde estoy ahora.

 out.println(checkParentheses("({} [()] ({}))")); // should print true out.println(!checkParentheses("({} [() ({)})")); // should print false Boolean checkParentheses(String brackets) { Deque<Character> stack = new ArrayDeque<>(); for( char ch : brackets.toCharArray()) { if (stack.peek() == matching(ch)) { stack.pop(); } else { stack.add(ch); } } return stack.isEmpty(); } char matching(char ch) { // char c = (' '); switch (ch) { case ')': return '('; // c = '(' case ']': return '['; case '}': return '{'; default: // return c; throw new IllegalArgumentException("No match found"); } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

  1. Los caracteres que no están entre paréntesis deben ignorarse en la entrada, opcionalmente, la entrada puede eliminarse o simplemente omitirse en silencio
  2. Es necesario implementar comprobaciones especiales para los soportes de apertura/cierre.

Básicamente, checkParentheses debería ser tan simple como sigue:

 public static boolean checkParentheses(String str) { if (null == str || str.isEmpty()) { return true; } Deque<Character> stack = new ArrayDeque<>(); for (char c : str.toCharArray()) { if (openingBracket(c)) { stack.push(c); } else if (closingBracket(c)) { if (stack.isEmpty() || matchingBracket(c) != stack.pop()) { return false; } } // else ignore non-bracket char quietly } return stack.isEmpty(); }

Luego, los métodos adicionales pueden verse de la siguiente manera usando la instrucción switch :

 static boolean openingBracket(char c) { switch (c) { case '(': case '[': case '{': case '<': return true; default: return false; } } static boolean closingBracket(char c) { switch (c) { case ')': case ']': case '}': case '>': return true; default: return false; } } static char matchingBracket(char c) { switch (c) { case ')': return '('; case ']': return '['; case '}': return '{'; case '>': return '<'; default: throw new IllegalArgumentException("Bad character found instead of closing bracket: " + c); } }

Entonces el resultado de las pruebas es el siguiente:

 System.out.println(checkParentheses("({} [()] ({}))")); // true, balance ok System.out.println(!checkParentheses("({} [() ({)})")); // true, NOT balanced
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda