LeetCode #557 Reverse Words in a String III 反转字符串中的单词 III

557 Reverse Words in a String III 反转字符串中的单词 III

Description:
Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

Example:

Example 1:
Input: "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"

Note:
In the string, each word is separated by single space and there will not be any extra space in the string.

题目描述:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 :

示例 1:

输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

思路:

按空格分割开字符串, 依次反转
时间复杂度O(n), 空间复杂度O(n)

代码:
C++:

class Solution 
{
public:
    string reverseWords(string s) 
    {
        int j = s.find(" ") == s.npos ? s.size() : s.find(" "), i = 0;
        while (j <= s.size()) 
        {
            if (s[j] == ' ' or j == s.size()) 
            {
                reverse(s, i, j - 1);
                i = j + 1;
            }
            ++j;
        }
        return s;
    }
private:
    void reverse(string &s, int i, int j) 
    {
        while (i < j) 
        {
            s[i] ^= s[j];
            s[j] ^= s[i];
            s[i++] ^= s[j--];
        }
    }
};

Java:

class Solution {
    public String reverseWords(String s) {
        String[] temp = s.split(" ");
        for (int i = 0; i < temp.length; i++) temp[i] = new StringBuilder(temp[i]).reverse().toString();
        return String.join(" ", temp);
    }
}

Python:

class Solution:
    def reverseWords(self, s: str) -> str:
        return ' '.join([word[::-1] for word in s.split(' ')])

你可能感兴趣的:(LeetCode #557 Reverse Words in a String III 反转字符串中的单词 III)