✨题目

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

✨示例

输入:“Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”

✨提示

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

✨解题

  1. 根据最近做题的思路来看,最容易想到的就是对每一个单词做翻转的操作,然后按照原来的顺序拼在一起。但是时间复杂度比较高,应该是过不了这个题的。
  2. 第二个思路就是,遍历一次字符串,然后找到每个单词第一个字母的位置,和其后面第一个空格的位置
    image.png
    1. class Solution {
    2. public:
    3. string reverseWords(string s) {
    4. int len = s.length();
    5. int i = 0;
    6. string ans;
    7. while(i < len){
    8. int start = i;
    9. while(i < len && s[i] != ' '){
    10. i++;
    11. }
    12. for(int p = start;p < i;p++){
    13. ans.push_back(s[start + i - 1 -p]);
    14. }
    15. while(i < len && s[i] == ' '){
    16. i++;
    17. ans.push_back(' ');
    18. }
    19. }
    20. return ans;
    21. }
    22. };