zoukankan      html  css  js  c++  java
  • 微软面试题: LeetCode 151. 翻转字符串里的单词 出现次数:2

    题目描述:

     思路:

          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 };
  • 相关阅读:
    git命令使用方法
    git与svn对比
    浏览器缓存原理
    网络性能优化常用方法
    sass/scss 和 less的区别
    AngularJS和ReactJS对比
    让IE6,7,8支持HTML5新标签的方法
    Retina 屏移动设备 1px解决方案
    HttpClient学习
    国家二字码对照表
  • 原文地址:https://www.cnblogs.com/wangxf2019/p/14622751.html
Copyright © 2011-2022 走看看