我卡在 leetcode 问题 151. 反转字符串中的单词

i stuck in leetcode problem 151. Reverse Words in a String

给定一个输入字符串 s,反转单词的顺序。 单词定义为非 space 字符的序列。 s 中的单词将被至少一个 space 分隔。 Return 由单个 space.

连接的倒序单词字符串
class Solution {

public:

    string reverseWords(string s) {
        string ans;
        int i =0;
        int n = s.size();
        while(i<n)
        {
            while(i<n and s[i]==' ')
                i++;
            if(i>=n)
                break;
            int j =i+1;
            while(j<n and s[j]!=' ')
                j++;
            string word = s.substr(i,j-1);
            if(ans.size()==0)
                ans = word;
            else
                ans = word + " "+ ans;
            i = j+1;
            
        }
        return ans;
    }
};

预期输出-“blue is sky the” 我的输出-“blue is blue sky is th”

您的代码中只有一个小错字。

        string word = s.substr(i,j-1);

应该是

std::string word = s.substr(i, j - i);

所以你把 i 和 1 搞混了。

没什么大不了的。

#include <string>
#include <iostream>

std::string reverseWords(std::string s) {
    std::string ans;
    int i = 0;
    int n = s.size();
    while (i < n)
    {
        while (i < n and s[i] == ' ')
            i++;
        if (i >= n)
            break;
        int j = i + 1;
        while (j < n and s[j] != ' ')
            j++;
        std::string word = s.substr(i, j - i);
        if (ans.size() == 0)
            ans = word;
        else
            ans = word + " " + ans;
        i = j + 1;

    }
    return ans;
}
int main() {
    std::cout << reverseWords("ab cd ef");
}