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

304
Vistas
Cómo obtener la longitud de la última palabra en la cadena

He invertido la cadena y tengo un ciclo for para iterar a través de la cadena invertida.

Estoy contando caracteres y sé que tengo una falla lógica, pero no puedo determinar por qué tengo este problema.

La solución debe devolver la longitud de la última palabra de la cadena.

Mi primer pensamiento fue iterar a través de la cadena hacia atrás (no sé por qué decidí crear una nueva cadena, debería haberla iterado disminuyendo mi bucle for desde el final de la cadena).

Pero la lógica debería ser la misma desde ese punto para mi segundo ciclo for.

Mi lógica es básicamente tratar de contar los caracteres que no son espacios en blanco en la última palabra, y luego, cuando la variable de conteo tiene un valor, así como el siguiente espacio en blanco después de que el conteo haya contado los caracteres de la última palabra.

 class Solution { public int lengthOfLastWord(String s) { int count = 0; int countWhite = 0; char ch; String reversed = ""; for(int i = 0; i < s.length(); i++) { ch = s.charAt(i); reversed += ch; } for(int i = 0; i < reversed.length(); i++) { if(!Character.isWhitespace(reversed.charAt(i))) { count++; if(count > 1 && Character.isWhitespace(reversed.charAt(i)) == true) { break; } } } return count; } }
over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

Tal vez intente esto,

 public int lengthOfLastWord(String s) { String [] arr = s.trim().split(" "); return arr[arr.length-1].length(); }
over 4 years ago · Santiago Trujillo Denunciar

0

En primer lugar, como ha mencionado, su cadena inversa formada es solo una copia de su cadena original. Para rectificar eso,

 for (int i = s.length() - 1; i >= 0; i--) { ch = s.charAt(i); reversed += ch; }

En segundo lugar, la segunda condición if está dentro de su primera condición if. Es por eso que nunca se romperá (porque primero está verificando si el carácter es un espacio en blanco, si lo es, entonces no va a entrar en la declaración if, por lo tanto, su segunda condición de su bucle if interno nunca se cumplirá).

 public class HW5 { public static void main(String[] args) { String s = "My name is Mathew"; int count = lengthOfLastWord(s); System.out.println(count); } public static int lengthOfLastWord(String s) { int count = 0; int countWhite = 0; char ch; String reversed = ""; System.out.println("original string is----" + s); for (int i = s.length() - 1; i >= 0; i--) { ch = s.charAt(i); reversed += ch; } System.out.println("reversed string is----" + reversed); for (int i = 0; i < reversed.length(); i++) { if (!Character.isWhitespace(reversed.charAt(i))) count++; if (count > 1 && Character.isWhitespace(reversed.charAt(i)) == true) { break; } } return count; } }

=

 and the output is : original string is----My name is Mathew reversed string is----wehtaM si eman yM 6

Otra forma de hacerlo es: usa la función incorporada dividir que devuelve una matriz de cadena y luego devuelve el recuento de la última cadena en la matriz.

over 4 years ago · Santiago Trujillo Denunciar

0

Otra opción sería usar el índice del último espacio y calcular la longitud a partir de él:

 public int lengthOfLastWord(String string) { int whiteSpaceIndex = string.lastIndexOf(" "); if (whiteSpaceIndex == -1) { return string.length(); } int lastIndex = string.length() - 1; return lastIndex - whiteSpaceIndex; }

String.lastIndexOf() encuentra el índice de inicio de la última aparición de la cadena especificada. -1 significa que no se encontró la cadena, en cuyo caso tenemos una sola palabra y la longitud de la cadena completa es lo que necesitamos. De lo contrario, significa que tenemos el índice del último espacio y podemos calcular la longitud de la última palabra usando lastIndexInWord - lastSpaceIndex .

over 4 years ago · Santiago Trujillo Denunciar

0

Hay muchas maneras de lograrlo. El enfoque más eficiente es determinar el índice del último espacio en blanco seguido de una letra .

Se puede hacer iterando sobre los índices de la cadena dada ( recordatorio: String mantiene una matriz de bytes internamente ) o simplemente invocando el método lastIndexOf() .

Teniendo en cuenta que la longitud de una cadena que se puede encontrar en el tiempo de ejecución está limitada a Integer.MAX_VALUE , no será una solución inteligente para el rendimiento asignar en la memoria una matriz , producida como resultado de la división de esta larga cadena, cuando solo se requiere la longitud de un solo elemento .

El siguiente código demuestra cómo abordar este problema con Stream IPA y un bucle for habitual.

La lógica de la corriente:

  • Cree un IntStream que itere sobre los índices de la cadena dada, comenzando desde el último.
  • Descarte todos los símbolos no alfabéticos al final de la cadena con dropWhile() .
  • Luego retenga todas las letras hasta el primer símbolo no alfabético encontrado al usar takeWhile() .
  • Obtenga el recuento de elementos en la transmisión.

Solución basada en flujo:

 public static int getLastWordLength(String source) { return (int) IntStream.iterate(source.length() - 1, i -> i >= 0, i -> --i) .map(source::charAt) .dropWhile(ch -> !Character.isLetter(ch)) .takeWhile(Character::isLetter) .count(); }

Si su elección es un bucle , no es necesario invertir la cadena. Puede iniciar la iteración desde el último índice, determinar los valores del end y start y devolver la diferencia.

Por si acaso , si necesita invertir una cadena, esa es la forma más simple y eficiente:

 new StringBuilder(source).reverse().toString();

Solución iterativa:

 public static int getLastWordLength(String source) { int end = -1; // initialized with illegal index int start = 0; for (int i = source.length() - 1; i >= 0; i--) { if (Character.isLetter(source.charAt(i)) && end == -1) { end = i; } if (Character.isWhitespace(source.charAt(i)) && end != -1) { start = i; break; } } return end == -1 ? 0 : end - start; }

principal()

 public static void main(String[] args) { System.out.println(getLastWord("Humpty Dumpty sat on a wall % _ (&)")); }

producción

 4 - last word is "wall"
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