Solución:
Este problema se resuelve con un recorrido inverso:
Esperar a ver este problema en ambos casos;
- La última es la palabra
- El último es un espacio
para el primer caso, un cálculo directo de la última palabra de longitud, a continuación, volver a;
pero esto también se divide en dos casos más pequeños,- Por último hay una palabra delante de la palabra, se determina si o no la última palabra en una condición para terminar el puntero del elemento actual es un espacio;
- La última palabra no está en frente de la palabra, de modo que el extremo de la posición actual del puntero de -1;
Para el segundo caso, la necesidad de filtrar el espacio, y luego calcula, pero si la cadena sólo espacios, todos los espacios separaron por filtración, la posición actual del puntero de -1, 0 pueden ser devueltos directamente.
Código es el siguiente:
class Solution:
def lengthOfLastWord(self, s):
right = len(s) - 1
while right >= 0:
if s[right] != ' ':
if right == 0:
return 1
count = 0
while s[right] != ' ' and right >= 0:
right -= 1
count += 1
return count
else:
while s[right] == ' ' and right >= 0:
right -= 1
if right == -1:
return 0
return 0
Resultados de pantalla:
El
SI derecha == 0:
. Retorno 1
se resumen en el primer bucle for
class Solution:
def lengthOfLastWord(self, s):
# if len(s) == 1 and s[0] != ' ':
# return 1
# elif len(s) == 1 and s[0] == ' ':
# return 0
right = len(s) - 1
while right >= 0:
if s[right] != ' ':
count = 0
while s[right] != ' ' and right >= 0:
right -= 1
count += 1
return count
else:
while s[right] == ' ' and right >= 0:
right -= 1
if right == -1:
return 0
return 0
Calculando primero el filtrado de espacio, y luego la palabra
class Solution:
def lengthOfLastWord(self, s):
end = len(s) - 1
while (end >= 0 and s[end] == ' '):
end -= 1
if end == -1:
return 0
start = end
while start >= 0 and s[start] != ' ':
start -= 1
return end - start