[剑指Offer] 44.翻转单词顺序列

题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

【思路】先把由空格分割的每个字符串翻转,最后翻转整个字符串。

 1 class Solution
 2 {
 3 public:
 4     string ReverseSentence(string str)
 5     {
 6         int len = str.length();
 7         int num = 0;
 8         int pos[len];
 9         memset(pos, 0, sizeof(pos));
10         //得到所有空格的位置,多个连续空格也可以
11         for(int i = 0; i < len; i ++)
12         {
13             if(str[i] == ‘ ‘)
14                 pos[num++] = i;
15         }
16         if(num == 0) return str;
17         if(num == 1)
18         {
19             reverse(str.begin(),str.begin() + pos[0]);
20             reverse(str.begin() + pos[0] + 1,str.end());
21             reverse(str.begin(),str.end());
22             return str;
23         }
24         for(int i = 0; i < num; i ++)
25         {
26             if(i == 0)              //翻转第一个空格前面的字符串
27                 reverse(str.begin(),str.begin() + pos[i]);
28             else if(i == num - 1)   //翻转最后一个空格之后的字符串
29                 reverse(str.begin() + pos[i] + 1,str.end());
30             else                    //翻转两空格之间的字符串
31                 reverse(str.begin() + pos[i - 1] + 1,str.begin() + pos[i]);
32         }
33         reverse(str.begin(),str.end());
34         return str;
35     }
36 };
时间: 2024-08-02 00:20:12

[剑指Offer] 44.翻转单词顺序列的相关文章

【剑指offer】翻转单词顺序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27372033 题目描写叙述: JOBDU近期来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看.但却读不懂它的意思.比如,"student. a am I".后来才意识到.这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.". Cat对一一

【Java】 剑指offer(58-1) 翻转单词顺序

  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出"student. a am I". 思路 一开始自己觉得要用split()方法,但这要开辟新的数组,占内存空间,不行. 首先实现翻转整个句子:只需要在首尾两端各放置一个

剑指OFFER之翻转单词顺序

题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student. a am I”.后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”.Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 输入: 每个测试案例为一行,表示一句英文句子. 我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30

【剑指offer】翻转单词顺序,C++实现

原创博文,转载请注明出处! # 题目 # 思路         两次翻转,首先整个句子翻转,然后单词翻转. # 代码 原文地址:https://www.cnblogs.com/wanglei5205/p/8976617.html

剑指offer (44) 扑克牌的顺子

题目:从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的 2-10为数字本身,A为1,J为11,Q为12,K为13,大小王可以替换任意数字 题解分析: step1. 首先大小王看作0,与其他数字都区分开 step2. 对这5张牌排序 step3. 统计5张牌中0的个数和 相邻数字之间的空缺总数,因为 我们可以把0替换掉空缺所需的数 bool IsContinuous(std::vector<int>& num) { if (num.size() != 5) retur

剑指offer 左右翻转二叉树

class Solution { public: void Mirror(TreeNode *pRoot) { if(pRoot == nullptr) return; cout << pRoot->val << endl; auto temp = pRoot->left; pRoot->left = pRoot->right; pRoot->right = temp; Mirror(pRoot->left); Mirror(pRoot->

剑指Offer——翻转单词顺序列

题目描述: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 分析: 同上一题的解法.剑指Offer--左旋转字符串. 代码: 1 class Solut

剑指offer (42) 单词翻转

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符顺序不变 题解分析: 两次翻转: 第一次翻转整个句子 第二次解析出每个单词并将单词翻转 void reverse(char* first, char* last) { assert(first != NULL && last != NULL); while (first < last) { char temp = *first; *first = *last; *last = temp; ++first; --last; }

剑指OFFER之栈的压入、弹出序列(九度OJ1366)

题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 输入: 每个测试案例包括3行: 第一行为1个整数n(1<=n<=100000),表示序列的长度. 第二行包含n个整数,表示栈的压入顺序. 第三行包含n个整数,表示栈的弹出顺序. 输出: 对应每个测试案例,如果第二个序列是