题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:两步反转法,先整体反转,然后每个单词进行反转。
找单词的方法是找相应的空格。
如果start的位置是空格就++,如果end的地方是空格就--或者是末尾结束符,就进行反转,一定要记得自己定义一个反转函数。
其他在单词中间的情况就++end。找空格。
class Solution {
public:void helper(string &str,int start,int end){for(start,end;start < end;++start,--end){swap(str[start],str[end]);}}string ReverseSentence(string str) {if(str.size() == 0){return "";}helper(str,0,str.size() - 1);int start = 0,end = 0;while(str[start] != '\0'){if(str[start] == ' '){++start;}else if(str[end] == ' ' || str[end] == '\0'){helper(str,start,end - 1);start = end;++end;}else{++end;}}return str;}
};

这道题目还有进一步的变式题,就是两个单词之间有很多空格,最后只输出一个空格,这题的话,可以使用istringstream in(string),然后自己依据空格分割每一个单词,存储到一个数组里面,再从最后一个单词开始开始拼接,就得到了结果。

class Solution {
public:/*** @param s : A string* @return : A string*/string reverseWords(string s) {// write your code hereif (s.size() < 2) {return s;}istringstream ss(s);string tmp, result;vector<string> no_space;while (ss >> tmp) {no_space.push_back(tmp);}if(no_space.size() == 0){return " ";}int i;for (i = no_space.size() - 1; i > 0; --i) {result.append(no_space[i]);result.append(" ");}result.append(no_space[i]);return result;
}
};

转载于:https://www.cnblogs.com/dingxiaoqiang/p/8207244.html

42翻转单词顺序列+注意该题找单词的方法相关推荐

  1. 【剑指offer{40-44}】和为S的连续正数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列、扑克牌顺子

    文章目录 和为S的连续正数序列 题目描述 C++代码 和为S的两个数字 题目描述 C++代码 左旋转字符串 题目描述 C++代码 翻转单词顺序列 题目描述 C++代码 扑克牌顺子 题目描述 C++代码 ...

  2. [剑指offer]面试题42:翻转单词顺序 VS左旋转字符串

    面试题42:翻转单词顺序 VS左旋转字符串 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...

  3. 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串

    反转单词顺序以及左旋转字符串:输入一个英文句子,翻转句子中的单词顺序,单词内部的字母顺序是不变的 – I am a student. -> student. am I 第一步,翻转句子中的所有字 ...

  4. 数据结构与算法--翻转单词顺序

    翻转单词顺序 题目:输入一个英文句子,翻转句子中的单词顺序,但是单词内的字符顺序不变,例如:I am a software engineer -> engineer software a am ...

  5. 编程小练习:最大公约数,字符串反序输出,全排列,不用加减法求和,字符串内容反序,字符串中最长数字串,数组是否递增,数组反转,链表反转,翻转单词顺序

    最大公约数 --- 递归.非递归 #include <stdio.h>int gcd(int a, int b); int gcd_recursive(int a, int b);int ...

  6. LeetCode-剑指 Offer 58 - I. 翻转单词顺序

    剑指 Offer 58 - I. 翻转单词顺序 思路一:也是核心思想,就是先把句子中所有字符串取出放入字符串数组,再对数组中的字符串进行操作后重新连接即可,具体问题具体细节还需要按题目要求分析 而遍历 ...

  7. 7-59 翻转单词顺序 (20 分)

    7-59 翻转单词顺序 (20 分) 给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变.例如,如果字符串为"Hello World",则翻转后为"World He ...

  8. 【LeetCode】剑指 Offer 58 - I. 翻转单词顺序

    [LeetCode]剑指 Offer 58 - I. 翻转单词顺序 文章目录 [LeetCode]剑指 Offer 58 - I. 翻转单词顺序 一.双指针 一.双指针 算法解析: 倒序遍历字符串 s ...

  9. 剑指 Offer 58 - I. 翻转单词顺序 (双指针)

    剑指 Offer 58 - I. 翻转单词顺序 题意: 翻转一个英文句子中单词顺序 解法1 思路: split分割 + 倒序 public static String reverseWords(Str ...

最新文章

  1. hdu 4460 friend chains spfa 最短路里面的最长路
  2. pyrealsense2 设置摄像头曝光值 get_active_profile.get_device().query_sensors set_option() rs.option.exposure
  3. ThreadPoolExecutor线程池 + Queue队列
  4. 论文浅尝 | ICLR 2020 - 一文全览知识图谱研究
  5. postgresql cast转换类型
  6. 2013-2018卷积神经网络中十个最重要的概念与创新
  7. 金士顿U盘DT100G3-2014年款与2019年款对比
  8. 图像质量评价函数SSIM介绍
  9. linux 查看文件内容的命令
  10. Docker 安装 Elasticsearch 7.12.1
  11. 百度竞价开户需要什么资料,竞价开户流程
  12. 证件照蓝底变白底的方法
  13. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
  14. Linux设置超级用户密码
  15. 如何学计算机打字,如何学习最快的电脑打字如何为电脑新手快速学习打字
  16. Android 仿朋友圈,文字图片视频多条目,自动播放暂停
  17. 卸载电脑右下角闪烁的游戏图标的教程
  18. 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)
  19. 输入圆的半径,求面积
  20. Newtonsoft解析Json文件

热门文章

  1. centos上传文件oracle,CentOS下启用Oracle ACFS步骤
  2. Bochs调试及相关仿真工具的使用方法
  3. EL表达式 (详解)
  4. ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
  5. 汇编语言--单步中断
  6. const、static型数据在内存中如何存储?(变量存放位置)
  7. 解释i节点在文件系统中的作用?超级块作用?
  8. mybaits二十七:spring, spring mvc,mybatis(ssm) 整合
  9. jvm二:类加载,连接,初始化
  10. web前端开发--列表