(剑指Offer)面试题4:替换空格
题目:
请实现一个函数,把字符串中的每个空格替换成“%20”,例如输入“We are happy”,则输出“We%20are%20happy”。
思路:
背景:
在网络编程中,如果URL参数中含有特殊字符,如空格,#等,导致服务器端无法获得正确的参数值,我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则就是在‘%’后面跟上ASCII码的两位十六进制的表示,比如空格的ASCII码是32,即十六进制的)0x20,因此空格被替换为“%20”。
方法:
1、假设可以开辟新的空间。
创建一新字符串,并在新字符串上面做空格替换。
时间复杂度:O(n),空间复杂度:O(n)
2、假设不能开辟新的空间,且原字符串长度足够。
- 从头到尾扫描字符串,每遇到空格字符时做替换,将1个字符替换为3个字符,因此空格后面的字符需要后移两个字符。
时间复杂度:O(n^2),空间复杂度:O(0)
- 从尾向头扫描字符串,每遇到空格字符时做替换,无需后移字符。首先遍历一遍字符串,统计字符串中空格的个数,并计算替换后字符串的总长度,每替换一个空格,长度增加2.替换时,准备两个指针P1,P2分别指向原始字符串的末尾和替换后字符串的末尾,依次移动指针P1,遇到空格做替换,直至P1和P2相遇,即前面不再有空格出现。
时间复杂度:O(n),空间复杂度:O(0)
代码:
#include <iostream>
using namespace std;
void ReplaceBlank(char string[],int length){
if(string==NULL || length<=0)
return;
int originalLength=0;
int numberOfBlank=0;
int i=0;
while(string[i]!='\0'){
++originalLength;
if(string[i]==' ')
++numberOfBlank;
++i;
}
int newLength=originalLength+numberOfBlank*2;
if(newLength>length)
return;
int indexOfOriginal=originalLength;
int indexOfNew=newLength;
while(indexOfOriginal>=0 && indexOfNew>indexOfOriginal){
if(string[indexOfOriginal]==' '){
string[indexOfNew--]='0';
string[indexOfNew--]='2';
string[indexOfNew--]='%';
}
else
string[indexOfNew--]=string[indexOfOriginal];
--indexOfOriginal;
}
}
int main()
{
char sentence[100]="We are happy!";
ReplaceBlank(sentence,100);
cout << sentence << endl;
return 0;
}
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/4060ac7e3e404ad1a894ef3e17650423?rp=1
AC代码:
class Solution {
public:
string replaceSpace(string str) {
int originalLength=0;
int numberOfBlank=0;
int i=0;
while(str[i]!='\0'){
++originalLength;
if(str[i]==' ')
++numberOfBlank;
++i;
}
int newLength=originalLength+numberOfBlank*2;
//if(newLength>length)
// return;
int indexOfOriginal=originalLength;
int indexOfNew=newLength;
while(indexOfOriginal>=0 && indexOfNew>indexOfOriginal){
if(str[indexOfOriginal]==' '){
str[indexOfNew--]='0';
str[indexOfNew--]='2';
str[indexOfNew--]='%';
}
else
str[indexOfNew--]=str[indexOfOriginal];
--indexOfOriginal;
}
return str;
}
};
(剑指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.”. 思路: 如果按照顺序从前往后依 ...
随机推荐
- Linux_x86_Pwn溢出漏洞
基础栈溢出:未开启任何保护的程序 漏洞程序源码 #include <stdio.h>#include <stdlib.h>#include <unistd.h>v ...
- NetCore在Centos7上部署和Nginx集群部署访问
NetCore在Linux上部署 工具:WMWare虚拟机,Wmware12,CentOS7ISO镜像,VS2017 1.安装虚拟机,过程略,网上一搜一大把 2.用VS2017建一个NetCore的W ...
- open -python操作文件
一打开文件 二操作文件 三关闭文件 open(文件,模式,编码),打开文件----->0101010(以二进制的方式打开)------>编码(open默认utf-8编码)------> ...
- (转)Ubuntu 16.04 安裝Docker(PS:本文适用amd64位的ubuntu系统)
1.前置安裝,確保你的系統是64位 $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-p ...
- navicat批量导入数据
1.excel表导入数据 根据数据表添加excel表内容 开始导入数据
- 顺序存储线性表_ArrayList
相信大家在日常开发过程中 List 应该使用的非常非常多,今天就来简单学习一下 List 的数据结构 顺序存储线性表. 一.什么是顺序存储线性表 顺序存储线性表是最基本.最简单.也是最常用的一种数据结 ...
- 【20181026T1】**手枪【dfs】
题面 [错解] 百年难得一见之提高考搜索了 ...怎么搞啊 相当于是S进去有一个环? tarjan? 跑个联通块,可以穿过去的连一条边? 好主意-- dfs写完了-- 哎等下? 5 5 .##.. # ...
- PostgreSQL与MySQL的区别收集(转)
特性 MySQL PostgreSQL 实例 通过执行 MySQL 命令(mysqld)启动实例.一个实例可以管理一个或多个数据库.一台服务器可以运行多个 mysqld 实例.一个实例管理器可以监视 ...
- MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
MVC3.0框架开发项目: 有时在程序运行的时候会出现“HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保其拼写正确.”的错 ...
- ubuntu上安装systemtap
http://www.cnblogs.com/hdflzh/archive/2012/07/25/2608910.html