Sword se refiere a la "secuencia de palabras" de la serie Oferta.

Dada una cadena con espacios al principio y al final, déjele invertir la cadena. No puede haber espacios adicionales al principio y al final. Si son todos los espacios, devuelva la cadena original.

Por ejemplo, el “student. a am I”flip es“I am a student.”

Primero, se requiere preprocesamiento para determinar si la cadena de entrada tiene todos los espacios y, de ser así, generar la cadena directamente.

Divida cada palabra y luego use la palabra como unidad de inversión para obtener la cadena de resultado.

Una palabra es: desde el principio de un carácter que no es un espacio hasta el final del carácter anterior que es un espacio, es una palabra.

public class Solution {
    
    
    public String ReverseSentence(String str) {
    
    
        if(str == null) return str;
        int len = str.length();
        int i = 0;
        while(i<len && str.charAt(i) == ' ') i++;
        if(i == len) return str;
        
        String res = "";
        String tmp = "";
        boolean hasWord = false; // 是否已经形成一个单词
        for(int j = len-1; j >=0; j--){
    
    
            if(str.charAt(j) != ' '){
    
    
                tmp = str.charAt(j) + tmp;
                hasWord = true;
            }else if(str.charAt(j) == ' ' && hasWord == true){
    
    
                res = res + tmp + " ";
                tmp = "";  // 重置 tmp
                hasWord = false;  // 重置 hasWord
            }
        }
        if(tmp != ""){
    
    
            res += tmp;
        }
        return res;
    }
}

Úselo para StringBuilderlograr:

public class Solution {
    
    
    public String ReverseSentence(String str) {
    
    
        if(str == null) return str;
        int len = str.length();
        int i = 0;
        while(i<len && str.charAt(i) == ' ') i++;
        if(i == len) return str;
        
        StringBuilder res = new StringBuilder();
        StringBuilder tmp = new StringBuilder();
        boolean hasWord = false;
        for(int j = len-1; j >=0; j--){
    
    
            if(str.charAt(j) != ' '){
    
      
                tmp.insert(0,str.charAt(j));
                hasWord = true;
            }else if(str.charAt(j) == ' ' && hasWord == true){
    
    
                res = res.append(tmp).append(" ");
                //tmp = new StringBuilder();
                tmp.delete(0, tmp.length()); // 这里用delete避免产生新的对象
                hasWord = false;
            }
        }
        if(tmp.length() != 0){
    
    
            res.append(tmp);
        }
        str = res.toString();
        return str;
    }
}

Complejidad de tiempo: O (N)
Complejidad de espacio: O (N), debido a que no hay cambio en la cuerda original, se requiere espacio adicional

Supongo que te gusta

Origin blog.csdn.net/weixin_44471490/article/details/108986023
Recomendado
Clasificación