剑指offer-面试题4.替换空格
题目:请实现一个函数,把字符串中的每个空格都替换成"%20"。例如输入"We are happy."
则输出"We%20are%20happy."
这道题一看到就能想到直接从前到后遍历字符串,当遇到空格时候先将空格后面的字符串中每个
字符向后移动两个位置,然后再把空格及空格之后的两个字符替换为"%20"
剑指Offer书上这样说到:假设字符串长度为n,每遇到一个空格,需要移动后面的O(n)个字符,
那么对于n个空格来说算法时间复杂度为O(n*n),显然,时间复杂度为平方的方法算不上好
方法,那么有没有更好的方法呢?
剑指offer上提供了一种时间复杂度为O(n)的算法:
1.首先计算字符串中空格的个数。每个空格用三个字符替换,那么每多一个空格那么替换后的
字符串将多出来两个字符。因此计算出替换后字符串的长度。
2.在字符串中设置两个索引,p1索引指向字符串的结尾即'\0'处,另外一个指向计算出的
替换后字符串长度的位置。
3.当未遇到空格时候,将p1所指的字符赋值为p2所指的字符。同时索引p1,p2均向前移动一个
位置
4,当索引p1遇到空格时候将p2,p2-1,p2-2,这三个位置分别替换为'%' '2' '0',然后索引p1向前移动
一个位置,p2向前移动三个位置。
5.替换的结束条件是,当p1和p2索引位置相同时,这时候替换空格结束。
那么通过这么详尽的算法描述,这一题的解答为:
#include <iostream>
using namespace std; void ReplaceBlank(char string[],int length)
{
int blankcount=;
int i=;
int len;
len=strlen(string); while(string[i]!='\0')
{
if(string[i]==' ')
blankcount++;
string++;
} int LenAfter;
LenAfter=strlen(string)+blankcount*; int p1,p2; p1=len;
p2=len+LenAfter;
while(p1!=p2)
{
if(string[p1]!=' ')
{ string[p2]=string[p1];
p1--;
p2--;
}
else
{
string[p2--]='';
string[p2--]='';
string[p2--]='%';
p1--;
}
}
} int main()
{
char string[]="We are Happy.";
ReplaceBlank(string,);
cout<<"The Replaced Blank string is "<<string<<endl; return ;
}
截图:

剑指offer-面试题4.替换空格的更多相关文章
- 剑指offer面试题4 替换空格(java)
注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...
- 剑指offer面试题4 替换空格(c)
- 剑指Offer:面试题4——替换空格(java实现)
问题描述:请实现一个函数,把字符串中的每个空格替换成"%20". 例如: 输入:"We are happy." 输出:"We%20are%20happ ...
- C++版 - 剑指offer 面试题4: 替换空格 题解
面试题4:替换空格 提交网址: http://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=1 ...
- 剑指Offer编程题2——替换空格
剑指Offer编程题2——替换空格 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happ ...
- 剑指Offer - 九度1510 - 替换空格
剑指Offer - 九度1510 - 替换空格2013-11-29 20:53 题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之 ...
- 剑指offer第二版-5.替换空格
面试题5:替换空格 题目要求: 实现一个函数,把字符串中的每个空格都替换成“%20”,已知原位置后面有足够的空余位置,要求改替换过程发生在原来的位置上. 思路: 首先遍历字符串求出串中空格的数量,求出 ...
- 剑指offer(2)替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 题目分析 我们如果要替换空格,两步 ...
- 剑指offer【02】- 替换空格(Java)
题目:替换空格 考点:字符串 题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. ...
- 剑指Offer(4)——替换空格
题目: 请实现一个函数,把字符串中的每个空格替换成"%20".例如输入“We are happy.”,则输出“We%20are%20happy.”. 思路: 如果按照顺序从前往后依 ...
随机推荐
- 十分钟搭建自己的hadoop2/CDH4集群
版本及准备 我部署的是hadoop-2.0.0-cdh4.2.0.tar.gz,下载地址为http://archive.cloudera.com/cdh4/cdh/4/hadoop-2.0.0-cdh ...
- C#开发客户端、JAVA和tomcat开发服务端
hessian入门,Hello和文件上传范例,C#客户端+Java Tomcat后台 2.Hello范例1)后台--定义Java接口:package org.migle.hessian; public ...
- python学习之路-1 python基础操作
本篇所涉及的内容 变量 常量 字符编码 用户交互input 格式化字符串 python的缩进规则 注释 初始模块 条件判断 循环 变量 变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中 ...
- Kafka的Producer以及Consumer远程调用问题
公司需要分布式的JMS,所以研究了Kafka,之前在本地都没有出现问题,但是在服务器上布Kafka的时候发现了消费者无法消费的问题. kafka布到一台服务器上面,由于业务原因,producer和ka ...
- 一步一步学数据结构之n--n(Prim算法)
在这里说下最小连通网的Prim算法: 而Kruskal算法,http://blog.csdn.net/nethanhan/article/details/10050735有介绍,大家可以去看下! Pr ...
- markdown 书写代码
近期基于github + hexo 搭建了自己的博客.開始用markdown写博客,推荐 mac 平台用 mou 这个软件或者 vim. 介绍下markdown语法插入代码的规则: 有一种方法是全部代 ...
- JSTL学习笔记(核心标签)
一.JSTL标签分类: 核心标签 格式化标签 SQL标签 XML标签 JSTL函数 二.核心标签 引用方式:<%@ taglib prefix="c" uri=& ...
- [Spring入门学习笔记][创建网站URL]
设计网站的URL 现代的Web站点都会设计一套拥有明确意义,方便用户记忆的URL,不论是域名还是路径,以天码营为例: http://tianmaying.com/courses表示网站下所有的课程列表 ...
- javascript 阻止多次点击造成的轮播混乱
function nextSlider(){ //使用b作为开关,只有动画完成后才能进行下一次运动 if(b){ //如果b为真,则马上设置b为false,如果startmove的回调没有重新设置b的 ...
- jquery在火狐浏览中上传图片并显示
由于火狐浏览器有很多代码无法兼容,特别是图片的显示,下面我介绍一种是我亲自测试过可以实现的方法 <script> function setImagePreview() { //var ix ...