题目:

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

    示例:

    输入:"Let's take LeetCode contest"
    输出:"s'teL ekat edoCteeL tsetnoc"

    提示:

    在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。


    题解:

    用一个新的字符串,以空格为单词分界线,再用append函数从单词尾添加来反转单词

    1. class Solution {
    2. public:
    3. string reverseWords(string s) {
    4. string ans="";
    5. int len=s.size();
    6. int i = 0;
    7. //处理开始空格
    8. while(s[i]==' ')i++;
    9. //翻转两次
    10. while (i<len)
    11. {
    12. int start=i;
    13. while(i<len&&s[i]!=' ') i++;
    14. //添加翻转单词一遍
    15. for (int j = start ; j < i; j++)
    16. {
    17. ans+=s[i-j-1+start];//从单词尾加到单词头
    18. }
    19. while(i<len&&s[i]==' '){
    20. i++;
    21. }
    22. //单词结尾但是非句子结尾添加空格
    23. if(i<len-1||(i==len-1&&s[i]!=' ')) ans+=' ';
    24. }
    25. //第二遍翻转 全部倒过来
    26. reverse(ans.begin(),ans.end());
    27. return ans;
    28. }
    29. };