首页 > 其他 > 详细

微软面试题: LeetCode 151. 翻转字符串里的单词 出现次数:2

时间:2021-04-06 21:16:47      阅读:25      评论:0      收藏:0      [点我收藏+]

题目描述:

技术分享图片

 

 思路:

      1.  先把整个字符串翻转;

    2. 然后再将字符串中的每个单词往前移同时对每个单词再做翻转,每个单词之间留出一个空格。

       3. 在步骤 2 完成之后,原字符串中多余的空格会全部在字符串尾部,再将字符串尾部多余的空格

           全部删除即可;

代码:

  

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 class Solution {
 4 public:
 5     string reverseWords(string s)
 6     {
 7         std::reverse(s.begin(),s.end());
 8         const int s_len = s.size();
 9         int idx = 0;
10         for(int i = 0 ; i < s_len; ++i)
11         {
12             if(s[i] !=  )
13             {
14                 if(idx != 0)    s[idx++] =  ;//除了第一个单词之外,所有单词前都需要放空格
15                 int j = i;
16                 int w_begin = idx;//每个单词起始字符的下标
17                 while(j < s_len && s[j] !=  )//将整个单词往前移
18                 {
19                     s[idx++] = s[j++];
20                 }
21                 std::reverse(s.begin() + w_begin,s.begin() + idx);//将单词翻转
22                 i = j;//处理后面的单词
23             }
24         }
25         s.erase(s.begin() + idx,s.end());//移动翻转完成后,去掉字符串尾部的空格
26         return s;
27     }
28 };

 

微软面试题: LeetCode 151. 翻转字符串里的单词 出现次数:2

原文:https://www.cnblogs.com/wangxf2019/p/14622751.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!