LeetCode151.Múltiples soluciones para voltear palabras en una cadena

LeetCode151. Voltee las palabras en la cadena

Titulo

Dificultad media

Dada una cadena, voltee cada palabra en la cadena una por una.

Ejemplo 1:

输入: "the sky is blue"
输出: "blue is sky the"

Ejemplo 2

输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

Ejemplo 3

输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

Descripción:

  • Los caracteres sin espacios forman una palabra.
  • La cadena de entrada puede contener espacios adicionales antes o después, pero los caracteres invertidos no se pueden incluir.
  • Si hay espacios adicionales entre las dos palabras, reduzca los espacios entre las palabras después de la inversión a solo una.

Solución: Python Dafa

  Al ver los requisitos de este tema, la primera idea es Python. ¿No se resuelve con una oración? ¡Solo se necesita una oración, no se necesita una oración más return " ".join(reversed(s.split())), solo divídalo directamente, y luego invierta, luego conecte, todo de una vez, sin campanas ni silbatos!

El código completo es:

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        return " ".join(reversed(s.split()))

Solución dos: realice manualmente la función función

  Si implementa manualmente esta función, primero podemos revertir el carácter completo, y luego hacer coincidir desde el primer carácter no vacío hasta el carácter vacío, que es una palabra, y luego revertir la palabra, Eso es todo! En este bucle, atravesamos toda la cadena para completar la conversión, el código es el siguiente:

class Solution {
public:
    string reverseWords(string s) {
        // 反转整个字符串
        reverse(s.begin(), s.end());
        int n = s.size();
        int idx = 0;
        for (int i = 0; i < n; ++i) {
          	// 如果当前不为空,则开始为单词
            if (s[i] != ' ') {
                // 填一个空白字符然后将idx移动到下一个单词的开头位置
                if (idx != 0) s[idx++] = ' ';
                // 循环遍历至单词的末尾
                int end = i;
                while (end < n && s[end] != ' ') s[idx++] = s[end++];
                // 反转整个单词
                reverse(s.begin() + idx - (end - i), s.begin() + idx);
                // 更新i的值,寻找下一个单词
                i = end;
            }
        }
        s.erase(s.begin() + idx, s.end());
        return s;
    }
};
Publicado 180 artículos originales · elogiado 1217 · 120,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_43422111/article/details/105443962
Recomendado
Clasificación