(剑指Offer)面试题42:翻转单词顺序
题目:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。
例如输入字符串“I am a student.”,则输出"student. a am I".
思路:
这是一道常见的面试题,思路分两步:
1、翻转句子中的所有字符;
2、翻转句子中每一个单词;
代码:
#include <iostream>
#include <string.h> using namespace std; void Reverse(char* pBegin,char* pEnd){
if(pBegin==NULL || pEnd==NULL)
return;
char tmp;
while(pBegin<pEnd){
tmp=*pBegin;
*pBegin=*pEnd;
*pEnd=tmp;
pBegin++;
pEnd--;
}
} char* ReverseSentence(char* pData){
if(pData==NULL)
return NULL; char* pBegin=pData;
/*
char* pEnd=pData;
while(*pEnd!='\0')
pEnd++;
pEnd--;
*/
int len=strlen(pData);
char* pEnd=pData+len-1; Reverse(pBegin,pEnd); pBegin=pEnd=pData;
while(*pBegin!='\0'){
if(*pBegin==' '){
pBegin++;
pEnd++;
}
else if(*pEnd==' ' || *pEnd=='\0'){
Reverse(pBegin,--pEnd);
pBegin=++pEnd;
}
else{
pEnd++;
}
} return pData;
} int main()
{
char data[]="Hello world!";
cout << ReverseSentence(data) << endl;
return 0;
}
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/3194a4f4cf814f63919d0790578d51f3?rp=2
AC代码:
class Solution {
public:
string ReverseSentence(string str) {
int len=str.length();
if(len<=1)
return str;
int pBegin=0;
int pEnd=len-1;
Reverse(str,pBegin,pEnd);
pBegin=0;
pEnd=0;
while(pBegin<=len-1){
if(str[pBegin]==' '){
pBegin++;
pEnd++;
}
else if(str[pEnd]==' ' || pEnd==len){
Reverse(str,pBegin,pEnd-1);
pBegin=++pEnd;
}
else
pEnd++;
}
return str;
}
void Reverse(string &str,int pBegin,int pEnd){
char tmp;
while(pBegin<pEnd){
tmp=str[pBegin];
str[pBegin]=str[pEnd];
str[pEnd]=tmp;
pBegin++;
pEnd--;
}
}
};
(剑指Offer)面试题42:翻转单词顺序的更多相关文章
- 剑指Offer - 九度1361 - 翻转单词顺序
剑指Offer - 九度1361 - 翻转单词顺序2013-11-23 02:45 题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fi ...
- 剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)
问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这 ...
- 【剑指Offer】44、翻转单词顺序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student ...
- 剑指offer面试题14-调整数组顺序使奇数位于偶数前面
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部奇数位于数组的前半部分.全部偶数位于数组的后半部分. 前后分的这个.,让我想起来高速排序.好吧,就用这个做. 考虑到了排序的可扩 ...
- C++版 - 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面
题目: 调整数组顺序使奇数位于偶数前面 热度指数:11843 时间限制:1秒 空间限制:32768K 本题知识点: 数组 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇 ...
- 剑指offer 面试题. 按之字形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 方法1: 正常层次遍历,利用普通队列.逢 ...
- 【剑指Offer面试题】 九度OJ1518:反转链表
与其非常快写出一段漏洞百出的代码,倒不如细致分析再写出鲁棒的代码. 提前想好測试用例(输入非空等等)进行測试改动代码. 题目链接地址: http://ac.jobdu.com/problem.php? ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
随机推荐
- 解决win10下git闪退
网上找了很多方法,只有这个是有用的,记录下来. 问题描述 在git官网下载了软件,安装之后,git Bash出现闪退现象,同时在当前文件夹下面会生成一个mintty.exe.stackdump的文件. ...
- cogs——2098. Asm.Def的病毒
2098. Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “这就 ...
- Linux中建立软raid
Linux内核中有一个md(multiple devices)模块在底层管理RAID设备,它会在应用层给我们提供一个应用程序的工具mdadm. mdadm用于构建.管理和监视Linux MD设备(即R ...
- adroid swipeRefreshLayout无法显示进度条的问题
一句话经验:必须嵌套scrollerview或者listview
- noip200204过河卒
如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例如上图 C ...
- Apache -- XAMPP Apache 无法启动原因及解决方法
XAMPP Apache 无法启动原因1(缺少VC运行库): 这个就是我遇到的问题原因,下载安装的XAMPP版本是xampp-win32-1.7.7-VC9,而现有的Windows XP系统又没有安装 ...
- 一个iframe注入漏洞,也是微软的 Application["error"] 漏洞
最近学校进行安全等级评估,有人给我打电话,说我之前写的一个网站存在iframe注入漏洞,页面是error页面.我于是用netsparker扫描了自己的网站,果然发现error页面存在漏洞,我写网站的时 ...
- [转]远程注入DLL : 取得句柄的令牌 OpenProcessToken()
http://hi.baidu.com/43755979/blog/item/3ac19711ea01bdc4a6ef3f6a.html 要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关 ...
- JavaScript学习10:动态载入脚本和样式
我们在写Web页面的时候,须要引入非常多的JavaScript脚本文件和CSS样式文件,尤其是在站点需求量非常大的时候,脚本的需求量也随之变大,这样一来,站点的性能就会大打折扣.因此就出现了动态载入的 ...
- 【jQuery】remove()和empty()的使用
在项目需求中 ,会涉及,为select下拉框中重新填充或追加新的下拉项. 这样的话 之前的下拉项就需要清除掉. 有了这个需求,就需要我们注意到remove()和empty()的区别在哪里: empty ...