博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Reverse Words in a String II 翻转字符串中的单词之二
阅读量:5934 次
发布时间:2019-06-19

本文共 1695 字,大约阅读时间需要 5 分钟。

 

Given an input string , reverse the string word by word. 

Example:

Input:  ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"]Output: ["b","l","u","e"," ","i","s"," ","s","k","y"," ","t","h","e"]

Note: 

  • A word is defined as a sequence of non-space characters.
  • The input string does not contain leading or trailing spaces.
  • The words are always separated by a single space.

Follow up: Could you do it in-place without allocating extra space?

 

这道题让我们翻转一个字符串中的单词,跟之前那题  没有区别,由于之前那道题我们就是用in-place的方法做的,而这道题反而更简化了题目,因为不考虑首尾空格了和单词之间的多空格了,方法还是很简单,先把每个单词翻转一遍,再把整个字符串翻转一遍,或者也可以调换个顺序,先翻转整个字符串,再翻转每个单词,参见代码如下:

 

解法一:

class Solution {public:    void reverseWords(vector
& str) { int left = 0, n = str.size(); for (int i = 0; i <= n; ++i) { if (i == n || str[i] == ' ') { reverse(str, left, i - 1); left = i + 1; } } reverse(str, 0, n - 1); } void reverse(vector
& str, int left, int right) { while (left < right) { char t = str[left]; str[left] = str[right]; str[right] = t; ++left; --right; } }};

 

我们也可以使用C++ STL中自带的reverse函数来做,我们先把整个字符串翻转一下,然后再来扫描每个字符,用两个指针,一个指向开头,另一个开始遍历,遇到空格停止,这样两个指针之间就确定了一个单词的范围,直接调用reverse函数翻转,然后移动头指针到下一个位置,在用另一个指针继续扫描,重复上述步骤即可,参见代码如下:

 

解法二:

class Solution {public:    void reverseWords(vector
& str) { reverse(str.begin(), str.end()); for (int i = 0, j = 0; i < str.size(); i = j + 1) { for (j = i; j < str.size(); ++j) { if (str[j] == ' ') break; } reverse(str.begin() + i, str.begin() + j); } }};

 

类似题目:

 

参考资料:

 

 

转载地址:http://kyjtx.baihongyu.com/

你可能感兴趣的文章
Xcode的Refactor使用
查看>>
webpack配置historyApiFallback的坑
查看>>
浅谈Javascript中的作用域链
查看>>
PopupMenu
查看>>
自己动手做一个IM框架(二)
查看>>
Javascript 模块化指北
查看>>
MarkDown 的常用高阶教程
查看>>
利用File,Drop&Drag,XHR2实现图片拖拽上传
查看>>
如何用 SpringBoot 优雅的写代码
查看>>
Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现
查看>>
Aapt.exe finished with non-zero exit value 1
查看>>
关于vuex购物车实现的原理
查看>>
Android 自定义 View 实战之 PuzzleView
查看>>
js 数组排序
查看>>
从零开始学前端动画 —— 简单的特效登录
查看>>
如何更愉快地使用rem —— 别说你懂CSS相对单位
查看>>
Flutter中管理路由栈的方法和应用
查看>>
Android MVP模式 简介
查看>>
Python并行编程
查看>>
Qt应用自动化系列教程-01快速入门
查看>>