Blog en español

Invertir una cadena en Java: guía para entrevistas

10 de mayo de 202616 min de lectura
Invertir una cadena en Java: guía para entrevistas

Domina invertir una cadena en Java con la respuesta correcta, complejidad, inmutabilidad, Unicode y diferencias entre StringBuilder y StringBuffer.

La mayoría de los candidatos que tropiezan con la pregunta de entrevista sobre invertir una cadena en Java no tropiezan con el código. Tropiezan con la explicación: escriben algo que funciona y luego se quedan en blanco cuando el entrevistador pregunta por qué eligieron ese enfoque en lugar de otro. La pregunta de entrevista sobre invertir una cadena en Java es, en el fondo, una prueba de si puede elegir la herramienta adecuada y decir por qué en treinta segundos sin sonar como si estuviera leyendo una ficha.

Esta guía le ofrece una primera respuesta canónica, un guion oral que puede decir en menos de un minuto y los trampas de seguimiento — inmutabilidad, complejidad, Unicode, StringBuffer — que separan a quienes practicaron de quienes se prepararon.

Empiece con la única respuesta en Java que los entrevistadores realmente quieren oír

Diga primero StringBuilder, no porque sea sofisticado, sino porque es el valor predeterminado más limpio

Hay al menos cuatro formas legítimas de invertir una cadena en Java: un bucle manual de final a inicio, un intercambio con `char[]`, una pila y `StringBuilder.reverse()`. Las cuatro son defendibles. Pero en una entrevista, lo primero que diga indica cómo piensa sobre código de producción, no solo sobre acertijos. Los intercambios con `char[]` muestran que entiende la memoria. Los bucles manuales muestran que conoce el algoritmo. Una pila muestra que entiende LIFO. Todo eso es útil, después de haber demostrado que conoce la respuesta idiomática.

`StringBuilder.reverse()` es la primera respuesta correcta porque es breve, precisa y fácil de defender. Forma parte de la biblioteca estándar de Java, gestiona por usted el búfer y demuestra que escribe código como lo revisaría un ingeniero sénior. No está presumiendo. Está mostrando criterio.

Cómo se ve esto en la práctica

Aquí tiene la estructura exacta del código y la explicación oral que la acompaña:

Y esto es lo que puede decir en voz alta, en menos de sesenta segundos:

"Mi primer enfoque es `StringBuilder.reverse()`. Creo un `StringBuilder` nuevo a partir de la cadena de entrada, llamo al método `reverse` incorporado y lo convierto de nuevo en un `String`. Esto tiene complejidad temporal O(n) y espacial O(n): el builder guarda una copia mutable de los caracteres. Elegiría esto en un contexto de producción porque es legible, está probado por el JDK y gestiona por mí el búfer mutable. Si quiere, también puedo recorrer un bucle manual o explicar cómo se comporta con caracteres Unicode."

Esa última frase es importante. Ofrecer el seguimiento antes de que el entrevistador lo pregunte demuestra que conoce el panorama. En sesiones de preparación, los candidatos que añaden esa frase obtienen el seguimiento como una conversación y no como una trampa.

Explique la inmutabilidad de String como alguien que realmente conoce Java

Por qué invertir en el mismo lugar es imposible para String

El error conceptual más común en una entrevista sobre invertir cadenas en Java no es equivocarse con el algoritmo, sino tratar `String` como si fuera un búfer mutable. Los candidatos escriben código que parece modificar una cadena “en el mismo sitio”, cuando en realidad lo que han hecho es reasignar una referencia a un nuevo objeto. La clase `String` de Java es inmutable por diseño: una vez creado un objeto `String`, su matriz interna de caracteres no puede cambiarse. Toda operación que parece modificar un `String` — concatenación, `replace`, `substring` — devuelve un objeto `String` completamente nuevo.

Por eso invertir una cadena en Java “en el mismo lugar” no solo es difícil; es estructuralmente imposible con el tipo `String`.

Cómo se ve esto en la práctica

Considere esto:

La variable `s` ahora apunta a un objeto `String` completamente nuevo. El objeto original `"java"` sigue existiendo en memoria, sin cambios, hasta que el garbage collector lo recoja. Ahora compárelo con `StringBuilder`:

`StringBuilder` modifica su propio búfer interno. No se crea ningún objeto nuevo para la inversión en sí. Esa es la diferencia mecánica esencial, y nombrarla con claridad en una entrevista indica que entiende el modelo de memoria de Java, no solo su sintaxis.

La frase que hace que esto suene preparado para entrevista

Diga esto: "String es inmutable en Java, así que cualquier reversión requiere un objeto nuevo; por eso `StringBuilder`, que envuelve un `char[]` mutable, es la opción natural."

Esa sola frase cubre el porqué, el mecanismo y la consecuencia. Son quince palabras y responden a la pregunta implícita detrás de toda pregunta sobre invertir cadenas en Java.

Muestre el bucle manual solo después de habérselo ganado

El bucle de final a inicio es la alternativa limpia cuando quieren fundamentos

A veces un entrevistador dirá: "¿Puede hacerlo sin el método incorporado?" Esto no es una trampa: es una comprobación legítima de si entiende lo que realmente hace `reverse()`. El enfoque manual más limpio consiste en iterar desde el último índice hasta el primero y añadir cada carácter a un nuevo `StringBuilder`.

Esta es la respuesta manual defendible para invertir una cadena en Java. Es explícita, usa `StringBuilder` para evitar crear objetos repetidamente y es fácil de seguir en una pizarra.

Cómo se ve esto en la práctica

Tome la entrada `"java"`. En el índice 3 lee `'a'` y la añade. En el índice 2 lee `'v'` y la añade. En el índice 1 lee `'a'` y la añade. En el índice 0 lee `'j'` y la añade. Resultado: `"avaj"`. Recorrer esto en voz alta en una pizarra le permite explicar el movimiento de punteros sin sonar mecánico, porque está describiendo lo que ve y no recitando una fórmula.

Por qué los trucos de anteponer y la concatenación repetida son la trampa

La versión trampa se ve así:

Esto tiene complejidad temporal O(n²), porque cada `+=` sobre un `String` asigna un objeto nuevo y copia todos los caracteres anteriores. Para una cadena de diez caracteres, el coste es invisible. Para una de diez mil caracteres, es una caída de rendimiento. Los entrevistadores que piden el bucle manual suelen conocer esta trampa y esperan ver si cae en ella. Nombrarla, aunque sea brevemente, demuestra que entiende el comportamiento de la concatenación de cadenas en Java a nivel de implementación.

No omita la complejidad: los entrevistadores escuchan su criterio

La complejidad temporal es fácil; la espacial es donde la gente empieza a improvisar

Todos los enfoques comunes para invertir una cadena — `StringBuilder`, bucle manual, intercambio con `char[]` — tienen complejidad temporal O(n). Esa parte es fácil de decir y fácil de verificar. La parte en la que los candidatos pierden puntos es la complejidad espacial. Dicen "es O(n)" y pasan página, cuando en realidad el entrevistador está escuchando si pueden nombrar qué ocupa ese espacio y por qué.

Para `StringBuilder`: O(n) de espacio para el búfer mutable interno. Para el intercambio con `char[]`: O(n) de espacio para la copia del arreglo (ya que `String` es inmutable, primero debe convertirlo a `char[]`). Para una pila: O(n) de espacio para la propia pila. El patrón es el mismo en los tres casos, pero nombrar la estructura concreta que guarda los n caracteres muestra que está pensando en memoria, no solo recitando notación de complejidad.

Cómo se ve esto en la práctica

Aquí tiene el guion exacto de complejidad para una entrevista de Java que puede memorizar:

  • `StringBuilder.reverse()`: O(n) de tiempo, O(n) de espacio — el búfer `char` interno.
  • Bucle manual con `StringBuilder`: O(n) de tiempo, O(n) de espacio — por la misma razón.
  • Intercambio con `char[]`: O(n) de tiempo, O(n) de espacio — el arreglo de caracteres al que convierte.
  • Basado en pila: O(n) de tiempo, O(n) de espacio — la propia pila.

En una entrevista, diga: "Todos los enfoques comunes tienen O(n) de tiempo. El espacio también es O(n) en todos los casos — ya sea un búfer de `StringBuilder`, un arreglo de caracteres o una pila, necesita algún lugar para guardar n caracteres."

Cuando una pregunta de seguimiento cambia la respuesta

Si el entrevistador pide un enfoque en flujo o con memoria mínima, la respuesta cambia. Una inversión realmente in situ es imposible con `String`, pero con un `char[]` puede intercambiar desde ambos extremos hacia el centro y lograr O(1) de espacio extra. Nombrar esta restricción — "si me da un `char[]` en lugar de un `String`, puedo hacerlo con O(1) de espacio extra" — demuestra que entiende los límites del problema, no solo su solución por defecto.

Una breve nota de preparación que merece interiorizar: los candidatos que dijeron "es solo O(n)" sin nombrar la estructura recibieron sistemáticamente un seguimiento que dejaba en evidencia la laguna. Quienes nombraron el búfer o el arreglo recibieron un gesto de aprobación y pasaron a otra cosa. La diferencia fue una sola frase.

Mencione StringBuffer solo cuando lo necesite, y sepa por qué

StringBuilder es el valor predeterminado porque aquí no necesita sincronización

La distinción entre StringBuilder y StringBuffer es uno de esos temas de entrevista de Java que suena más importante de lo que suele ser. `StringBuffer` es seguro para hilos: sus métodos están sincronizados, lo que significa que varios hilos pueden llamarlos sin corromper el estado. `StringBuilder` no está sincronizado, lo que significa que es más rápido en contextos de un solo hilo.

Una pregunta de entrevista sobre invertir una cadena casi nunca implica varios hilos. Está invirtiendo una sola cadena en una sola llamada de método. Elegir `StringBuffer` en ese contexto no transmite cautela; transmite que está aplicando una regla sin entender cuándo aplica.

Cómo se ve esto en la práctica

Si el entrevistador no menciona seguridad entre hilos, use `StringBuilder` y no diga nada sobre `StringBuffer`. Si pregunta "¿por qué `StringBuilder` en lugar de `StringBuffer`?", diga: "StringBuffer está sincronizado, lo que añade un coste que aquí no necesito; esta es una operación de un solo hilo, así que `StringBuilder` es la elección correcta."

Eso es toda la respuesta. Una frase, correcta, y listo. En sesiones de revisión de código, los candidatos que empezaron con `StringBuffer` como primera opción a menudo tuvieron que rectificar cuando les preguntaron por qué, porque habían aprendido el nombre de la clase sin aprender el intercambio de ventajas e inconvenientes. No sea ese candidato.

Trate bien Unicode antes de que Unicode le trate mal a usted

La respuesta carácter por carácter falla en cuanto aparecen emoji

El tipo `char` de Java es una unidad de código de 16 bits. La mayoría de los caracteres comunes caben en un solo `char`. Los emoji, muchos caracteres del este asiático y varios símbolos no caben: requieren dos `char`, llamados par sustituto, para representar un único punto de código Unicode. Cuando invierte una cadena carácter por carácter usando `charAt()` o un bucle sobre `char[]`, está invirtiendo unidades de código, no puntos de código. Un par sustituto que era `[alto, bajo]` pasa a ser `[bajo, alto]`, y eso no es un carácter válido. La cadena parece invertida, pero semánticamente está rota.

Este es el modo de fallo que una inversión simple no detecta, y es el tipo de problema que aparece en aplicaciones reales que manejan contenido generado por usuarios.

Cómo se ve esto en la práctica

Tome una cadena que contenga un solo emoji, por ejemplo `"hi😀"`. El emoji se codifica como dos `char` en la representación interna de Java. Una reversión ingenua carácter por carácter produce `[sustituto bajo][sustituto alto]hi` — el emoji queda inválido. Una reversión correcta y segura para Unicode usa puntos de código en su lugar:

Pruebe esto con una cadena vacía (devuelve vacía — bien), un solo carácter (devuelve el mismo carácter — bien) y una cadena con un emoji (devuelve el emoji intacto al inicio de la cadena invertida — correcto). La diferencia se ve en un IDE en menos de un minuto.

Diga lo suficiente para sonar sólido, no como si quisiera impresionar a un comité de Unicode

No necesita dar una clase sobre normalización Unicode. La frase de entrevista es: "La inversión básica funciona para ASCII y para la mayoría de los caracteres latinos. Si la cadena puede contener emoji o caracteres fuera del Basic Multilingual Plane, hay que iterar por punto de código y no por `char`, porque un reverso ingenuo puede separar pares sustitutos."

Diga eso si el entrevistador pregunta por casos extremos. Si no, preséntelo como un añadido de una sola frase: "También señalaría que los emoji y los pares sustitutos requieren una inversión consciente de puntos de código si la seguridad Unicode es un requisito". Es suficiente para sonar como alguien que realmente ha pensado en código de producción.

Use la respuesta con pila como respaldo, no como su primer movimiento

La pila funciona porque invertir es solo LIFO disfrazado

Una inversión basada en pila es conceptualmente elegante: empuje cada carácter en una pila y después extraígalos. Como una pila es Last In, First Out, el último carácter que empuja es el primero que extrae, que es exactamente lo que necesita la inversión. Es una buena ilustración de cómo la elección de una estructura de datos puede encarnar la lógica del algoritmo.

Pero en una entrevista sobre invertir una cadena en Java, no es la respuesta con la que debe empezar. En la práctica es más lenta que `StringBuilder`, requiere más código de apoyo y no aporta claridad al entrevistador, salvo que esté comprobando específicamente sus conocimientos de estructuras de datos.

Cómo se ve esto en la práctica

Recorra `"java"`: empuja j, a, v, a. Extrae: a, v, a, j. Resultado: `"avaj"`. La propiedad LIFO realiza la inversión automáticamente. En una entrevista simulada, los candidatos que usaban bien este enfoque eran los que nombraban primero `StringBuilder` y luego decían "también puedo mostrarle un enfoque con pila si quiere ver la propiedad LIFO en acción". Ese encuadre convierte la respuesta con pila en una demostración de profundidad, no en una primera elección confusa. Consulte la documentación de Java sobre `Deque` para las operaciones estándar de pila usadas aquí.

Preguntas frecuentes

P: ¿Cuál es la solución más simple y correcta en Java para invertir una cadena en una entrevista?

`new StringBuilder(s).reverse().toString()` — una sola línea, O(n) de tiempo, O(n) de espacio, y usa una implementación probada por el JDK. Diga esto primero y luego ofrezca recorrer alternativas si se lo piden.

P: ¿Cómo explica por qué `String` es inmutable y por qué eso importa aquí?

La matriz interna de caracteres de `String` es final y no puede modificarse después de la construcción. Toda operación que parece cambiar un `String` devuelve un objeto nuevo. Esto significa que la inversión in situ es estructuralmente imposible: siempre necesita una estructura mutable como `StringBuilder` para guardar los caracteres invertidos.

P: ¿Cuál es el mejor enfoque en Java para mencionar primero: intercambio con `char[]`, `StringBuilder` o bucle manual?

`StringBuilder`. Es idiomático, conciso y está respaldado directamente por la biblioteca estándar. Los intercambios con `char[]` y los bucles manuales son útiles como seguimientos cuando el entrevistador pide explícitamente una implementación de menor nivel.

P: ¿Cómo analiza la complejidad temporal y espacial de una forma que guste a los entrevistadores?

Indique que todos los enfoques comunes tienen O(n) de tiempo y luego nombre la estructura concreta que usa O(n) de espacio — el búfer de `StringBuilder`, el arreglo `char` o la pila. Nombrar la estructura en vez de decir solo "O(n) de espacio" es la señal que están escuchando.

P: ¿Cuándo es mejor `StringBuilder` que `StringBuffer` para este problema?

Casi siempre. La sincronización de `StringBuffer` añade un coste que no sirve para nada en una inversión de un solo hilo. Use `StringBuilder` por defecto y mencione `StringBuffer` solo si el entrevistador plantea explícitamente la seguridad entre hilos.

P: ¿Qué casos límite debería mencionar, como cadenas vacías y cadenas de un solo carácter?

Menciónelos brevemente: una cadena vacía devuelve una cadena vacía, un solo carácter devuelve el mismo carácter. `StringBuilder.reverse()` maneja ambos correctamente sin código especial. Ofrecer estos casos límite sin que se los pidan demuestra que piensa en condiciones de borde.

P: ¿Puede fallar la inversión de una cadena Java con Unicode o emoji?

Sí. `char` en Java es una unidad de código de 16 bits. Los emoji y otros caracteres fuera del Basic Multilingual Plane se representan mediante pares sustitutos: dos `char` para un solo carácter. Una inversión ingenua carácter por carácter separa esos pares y produce una salida inválida. La solución es iterar por punto de código usando `s.codePoints()` y `sb.appendCodePoint()`.

Cómo Verve AI puede ayudarle a triunfar en su entrevista técnica con la inversión de cadenas en Java

La parte más difícil de la pregunta de entrevista sobre invertir una cadena en Java no es escribir el código, sino dar la explicación bajo presión mientras sigue los seguimientos del entrevistador. Esa es una habilidad de rendimiento, y solo mejora con repetición frente a un sistema que realmente puede responder a lo que usted dijo, no a un mensaje prefabricado. Verve AI Coding Copilot está diseñado exactamente para eso: lee su pantalla mientras trabaja en un problema en LeetCode, HackerRank o CodeSignal, y muestra sugerencias contextuales basadas en lo que realmente ha escrito, no una pista genérica para un problema genérico. Cuando está en mitad de la explicación y el entrevistador cambia a "¿y si la cadena contiene emoji?", Verve AI Coding Copilot puede sugerir en tiempo real el enfoque de puntos de código Unicode, para que nunca le pille desprevenido el seguimiento. El modo Secondary Copilot le mantiene centrado en un único problema sin cambiar de contexto, algo importante cuando intenta mantener al mismo tiempo en la cabeza la explicación de `StringBuilder`, el guion de complejidad y el intercambio con `StringBuffer`. Practique aquí el guion de un minuto hasta que la explicación le suene natural; luego use Verve AI Coding Copilot para ponerlo a prueba con los seguimientos que realmente hacen tropezar a la gente.

Conclusión

No necesita un truco ingenioso para aprobar la pregunta de entrevista sobre invertir una cadena en Java. Necesita una primera respuesta clara — `StringBuilder.reverse()` — y una explicación serena de treinta segundos sobre el porqué: `String` es inmutable, así que necesita un búfer mutable, y `StringBuilder` es la opción idiomática en Java. Todo lo demás — el bucle manual, la pila, la diferencia con `StringBuffer`, el caso límite de Unicode — es un seguimiento, no el movimiento inicial.

Memorice el guion de un minuto. Practique decir en voz alta la frase sobre la inmutabilidad hasta que suene natural. Y guarde en la recámara la advertencia sobre Unicode: si el entrevistador empieza a insistir en casos extremos, "los pares sustitutos pueden separarse con una inversión ingenua carácter por carácter" es la frase que indica que ha pensado en código de producción y no solo en el algoritmo.

VA

Verve AI

Contenido