微软面试题: 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- ...
随机推荐
- 解决Affter Effect汉化版(cc2015之后的版本)中出现表达式错误的一种常用方法
解决Affter Effect出现表达式错误的一种常用方法 问题:汉化版的AE中,使用模板会出现表达式错误之类的提示,可能会导致某些设置或者效果失效 解决办法: 方法一.将配置文件中的zh_CN 改为 ...
- 知识补充之Django信号量
信号 抛砖引玉 1.如何对数据库的增加操作记录日志 2.信号比中间件的区别 Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特 ...
- C++变量的存储类型
C++变量和函数包括两个属性:数据类型和数据的存储类型.存储类型是指数据在内存中存储的方式.变量的存储类型分为四种:自动类型(auto),寄存器类型(register).静态类型(static)外部类 ...
- 后端狗的Vue学习历程(一) - demo示例与基本逻辑语法
目录 demo的三部分结构 判断:v-if.v-else-if.v-else 循环:v-for 事件绑定 v-on:eventType 内容输入的双向绑定v-model 源码:Github demo的 ...
- 数组和list 相互转换中遇到的坑
代码示例: public class ArrayDemo { public static void main(String[] args) { Integer[] arr = {1, 2, 3, 4, ...
- 《.NET 5.0 背锅案》第5集-案情大转弯:都是我们的错,让 .NET 5.0 背锅
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
- java服务器部署开源项目(若依)
1准备工作 (1)阿里云 centos_8_0_x64_20G_alibase_20200218.vhd [root@iZ2zeeqw5fxmm9zagf439aZ ~]# cat /etc/redh ...
- shell中if/seq/for/while/until
1.if语句格式: if 判断条件:then statement1 statement2 fi; 例子: 判断/test/a普通文件是否存在,存在则输出yes,不存在则输出no,并创建. #! / ...
- Vue-router插件使用
单页面原理 Vue是单页面开发,即页面不刷新. 页面不刷新,而又要根据用户选择完成内容的更新该怎么做?Vue中采用锚点来完成. 如访问http://127.0.0.1#/index就是主页,而访问ht ...
- MySQL索引背后的数据结构及原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...