微软面试题: LeetCode 151. 翻转字符串里的单词 出现次数:6
题目描述:
给定一个字符串,逐个翻转字符串中的每个单词。
说明:
无空格字符构成一个 单词 。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
示例:
输入:" hello world! "
输出:"world! hello"
解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
分析:本题考查的重点是能够 在原字符串上实现 时间 O(n) 空间(1) 的算法
代码如下:
1 #ifndef SOLUTION_SOLUTION_H
2 #define SOLUTION_SOLUTION_H
3
4 #include <bits/stdc++.h>
5
6 using namespace std;
7
8 class Solution
9 {
10 public:
11 //Time:O(n) space: O(1)
12 string reverseWords(string s) {
13 // 反转整个字符串
14 reverse(s.begin(), s.end());
15
16 int n = s.size();
17 int idx = 0;//指向刚放好并翻转过的单词的后一个位置
18 for (int start = 0; start < n; ++start) {
19 if (s[start] != ' ')
20 {
21 // 在刚放好的单词后填充一个空白字符,idx前进一位指向下一个单词该放到的起始位置
22 // 第一个单词直接从 0 处开始放,前面不需要填充空格
23 if (idx != 0) s[idx++] = ' ';
24 //保存下一个单词该放到的起始位置
25 int begin_tmp = idx;
26 // 循环遍历至单词的末尾
27 int end = start;
28 while (end < n && s[end] != ' ') s[idx++] = s[end++];
29
30 // 反转刚放好的单词
31 reverse(s.begin() + begin_tmp, s.begin() + idx);
32 // 更新start,去找下一个单词
33 start = end;
34 }
35 }
36 //删去字符串尾部的空格
37 s.erase(s.begin() + idx, s.end());
38 return s;
39 }
40 };
41
42 #endif //SOLUTION_SOLUTION_H
微软面试题: LeetCode 151. 翻转字符串里的单词 出现次数:6的更多相关文章
- C#版(击败100.00%的提交) - Leetcode 151. 翻转字符串里的单词 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- LeetCode 151. 翻转字符串里的单词(Reverse Words in a String)
151. 翻转字符串里的单词 151. Reverse Words in a String
- Java实现 LeetCode 151 翻转字符串里的单词
151. 翻转字符串里的单词 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky th ...
- LeetCode 151 翻转字符串里的单词
题目: 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 ...
- leetcode python翻转字符串里的单词
# Leetcode 151 翻转字符串里的单词### 题目描述给定一个字符串,逐个翻转字符串中的每个单词. **示例1:** 输入: "the sky is blue" 输出: ...
- 【LeetCode】151. 翻转字符串里的单词(剑指offer 58-I)
151. 翻转字符串里的单词 知识点:字符串:双指针 题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔 ...
- 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串
第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...
- 力扣(LeetCode)翻转字符串里的单词 个人题解
给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输 ...
- 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串
[算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...
随机推荐
- K8S Canal基于Prometheus进行实时指标监控
文章来源于本人的印象笔记,如出现格式问题可访问该链接查看原文 部署canal的prometheus监控到k8s中 1.grafana的docker部署方式:https://grafana.com/gr ...
- python开发基础(二)运算符以及数据类型之tuple(元组)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- Sql 解析XML 解决方案参考
1.定义存储过程 -- =============================================-- Author: <Author,,Name>-- Create da ...
- 剑指Offer-Python(6-10)
6.旋转数组的最小数字 class Solution: def minNumberInRotateArray(self, rotateArray): l = len(rotateArray) if l ...
- IAuthorizationFilter学习笔记(权限控制)以及非全局的filter
第一步:新建类CheckLoginFilter实现接口IAuthorizationFilter.请注意接口位于命名空间using System.Web.Mvc; public void OnAutho ...
- 解决git push出现error: failed to push some refs to 错误
错误截图 背景 码云上创建了空项目 本地项目绑定了远程仓库,尝试git push,然后报了错 解决办法 使用强制命令git pull origin master --allow-unrelated-h ...
- 学习笔记——ESP8266项目的例子编译时发生cannot find -lstdc++问题的解决
在尝试对进行ESP8266项目的例子进行编译时发生cannot find -lstdc++问题 第一想法是安装libstdc++,结果安装时又发生了下面的情况: 再次查找原因,最后发现当前安装的交叉编 ...
- php执行exec、xsell_exec命令失败
在php.ini下进行更改 查找disable_function 去掉exec xsell_exec 重启php
- VMware虚拟机 - 如何让鼠标从虚拟机中返回到个人计算机中
最简单的方式 按快捷键:ctrl+alt即可 彻底解决问题的方法:安装VMware Tools 前提条件 开启虚拟机 确认客户机操作系统正在运行 因为 VMware Tools 安装程序是使用 Per ...
- Socket accept 简要分析
accept 用于从指定套接字的连接队列中取出第一个连接,并返回一个新的套接字用于与客户端进行通信,示例代码如下 #include <sys/types.h> /* See NOTES * ...