Problema 34: La longitud de la última palabra (alta frecuencia)

¡He preparado 1,000 libros electrónicos y 100 mapas mentales de alta definición en varios campos de la informática, y responderé a [Recursos] después de prestar atención para conseguirlo! ¡Incluso puede responder [introducción] para unirse al grupo introductorio de BAT!
Problema 34: La longitud de la última palabra (alta frecuencia)

01. Pregunta de muestra


Esta es una pregunta simple, que se puede completar con un recorrido ordinario. Pero habrá algunas trampas, si no prestas atención, es bastante fácil cometer errores.


Pregunta 58: La longitud de la última palabra


Dada una cadena que contiene solo letras mayúsculas y minúsculas y espacios '', devuelve la longitud de su última palabra. Si la cadena se desplaza de izquierda a derecha, la última palabra es la última palabra que aparece.


Ejemplo:

输入: "Hello World" 
输出: 5

Descripción : una palabra se refiere solo a letras, no contiene caracteres de espacio como subcadena máxima.

02, análisis de problemas


Porque lo que queremos conseguir es la longitud de la última palabra , no es difícil pensar que podemos atravesar desde el final.

El problema de la pregunta es que todavía puede haber espacios al final.

Entonces, la idea general para resolver el problema es eliminar primero los espacios finales y luego atravesar desde el final hasta el frente, hasta que termine en el primer espacio.

Pero aquí hay un truco, podemos contar contando, comenzando desde el primer número que no es un espacio . En otras palabras, si hay un espacio al final, el valor de recuento es 0 y puede omitirlo directamente.
Problema 34: La longitud de la última palabra (alta frecuencia)

El código de implementación es el siguiente:


//JAVA
class Solution {    
    public int lengthOfLastWord(String s) {        
        if(s == null || s.length() == 0) return 0;        
        int count = 0;        
        for(int i = s.length()-1; i >= 0; i--){            
            if(s.charAt(i) == ' '){                
                if(count == 0) continue;               
                break;           
            }            
            count++;      
        }        
        return count;          
    }
}

Por supuesto, no es que no podamos usar API directamente para resolver algunos problemas "ingeniosos". El gran problema es que nos cuelguen.

//java
class Solution {
    public int lengthOfLastWord(String s) {
        s = s.trim();
        int start = s.lastIndexOf(" ") + 1;
        return s.substring(start).length();
    }

}
Este código debe ser entendido por todos. Primero recorta los espacios en ambos lados, luego localiza directamente la última palabra, intercepta para obtener la longitud.

cantidad. Ahora que hemos usado trim, ¿por qué no usamos directamente split para obtener la longitud de la última palabra?

//java
public class Solution {
    public int lengthOfLastWord(String s) {
        String[] words = s.split(" ");
        if (words.length < 1) return 0;
        return words[words.length - 1].length();
    }
}

03, aprendizaje de funciones


El recorte se utiliza en la solución anterior. Además de eliminar los espacios en ambos lados, ¿el recorte también elimina otros caracteres? Echemos un vistazo al código fuente de trim.

//JAVA
public String trim() {  
    int len = value.length;  
    int st = 0;  
    char[] val = value;    /* avoid getfield opcode */  
    while ((st < len) && (val[st] <= ' ')) {      
        st++;  
    }  
    while ((st < len) && (val[len - 1] <= ' ')) {      
        len--;  
    }  
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}

Como puede ver, además de eliminar espacios, la función de recorte en Java también elimina todos los caracteres que tienen un rango menor o igual que los espacios en la tabla de códigos ASCII.
Problema 34: La longitud de la última palabra (alta frecuencia)

La clasificación de espacios en la tabla de códigos ASCII es de 32 bits. Puede ver que la pestaña, el salto de línea, el retorno de carro, etc. están todos dentro del rango de control de recorte.

Supongo que te gusta

Origin blog.51cto.com/15076236/2608550
Recomendado
Clasificación