151. Reverse Words in a String

LeetCode medium оригинал: C# #array #csharp #hash-table #leetcode #medium #search #string #trie

Дана входная строка s, переверните порядок слов.

Слово определяется как последовательность символов, не являющихся пробелами. Слова в строке s разделены как минимум одним пробелом.

Верните строку, в которой слова расположены в обратном порядке, соединённые одним пробелом.

Обратите внимание, что строка s может содержать пробелы в начале или в конце, или множественные пробелы между двумя словами. Возвращаемая строка должна содержать только один пробел, разделяющий слова. Не включайте лишние пробелы.

Пример:

Input: s = "the sky is blue"

Output: "blue is sky the"

C# решение

сопоставлено/оригинал
public class Solution {
    public string ReverseWords(string s) {
        s = s.Trim();
        string[] words = s.Split(new char[] { ' ' },
            StringSplitOptions.RemoveEmptyEntries);
        Array.Reverse(words);
        return String.Join(" ", words);
    }
}

C++ решение

auto-draft, проверить перед отправкой
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public string ReverseWords(string s) {
        s = s.Trim();
        vector<string> words = s.Split(new char[] { ' ' },
            StringSplitOptions.RemoveEmptyEntries);
        Array.Reverse(words);
        return String.Join(" ", words);
    }
}

Java решение

сопоставлено/оригинал
class Solution {
    public String reverseWords(String s) {
        s = s.trim();
        List<String> wordList = Arrays.asList(s.split("\\s+"));
        Collections.reverse(wordList);
        return String.join(" ", wordList);
    }
}

JavaScript решение

сопоставлено/оригинал
var reverseWords = function (s) {
    s = s.trim();
    let words = s.split(/\s+/).reverse();
    return words.join(" ");
};

Python решение

сопоставлено/оригинал
class Solution:
    def reverseWords(self, s: str) -> str:
        return " ".join(reversed(s.split()))

Go решение

сопоставлено/оригинал
func reverseWords(s string) string {
    words := strings.Fields(s)
    for i := 0; i < len(words)/2; i++ {
        words[i], words[len(words)-i-1] = words[len(words)-i-1], words[i]
    }
    return strings.Join(words, " ")
}

Algorithm

1️⃣

Удаление лишних пробелов:

Удалите начальные и конечные пробелы из строки s. Это делается для того, чтобы убрать пробелы в начале и в конце строки, которые могут исказить конечный результат. В коде это реализовано с помощью методов erase и find_first_not_of/find_last_not_of, которые удаляют пробелы до первого и после последнего непробельного символа.

2️⃣

Разделение строки на слова:

Преобразуйте строку s в поток и используйте istringstream для чтения слов, разделенных пробелами. Каждое слово определяется как последовательность символов, не содержащая пробелов. Слова сохраняются в вектор words. Это делается с помощью copy, который копирует слова из потока в words с помощью istream_iterator.

3️⃣

Реверсирование и соединение слов:

Переверните вектор слов и соедините их обратно в одну строку, разделяя слова одним пробелом. Для реверсирования используется функция reverse, а для соединения слов — ostringstream вместе с ostream_iterator. Слова объединяются таким образом, что между ними находится только один пробел, исключая лишние пробелы между словами.

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.