《剑指offer》替换空格
本题来自《剑指offer》 替换空格
题目:
思路:
方案一:空间优先,在原数组的基础上进行替换,没替换一次就将后面的字符串向后挪两个位置
step1:查询空格的个数,在此基础上申请空格数两倍的位置
step2:从后面向前遍历,如果遇到空格就加入‘’02%‘’,否则就继续挪动非空格字符,直到空格遍历完。代码采用了c++编程
方案二:可申请额外的空间,当遇到空格就替换成'%20',采用python编程。
C++ Code:
class Solution {
public:
void replaceSpace(char *str,int length) {
if (str == NULL || length <= ){ //审核为空或者length小于0直接返回
return ;
}
int originallLength = ; //定义数组原始长度
int numberOfBlank = ; //定义空格的长度
int i = ;
while (str[i] != '\0'){ //统计空格的个数
originallLength ++;
if (str[i] == ' '){
numberOfBlank ++;
}
i++;
}
int newLength = originallLength + numberOfBlank * ; //数组新的长度,假设传入的数组后面还有空格
if (newLength > length){
return ;
}
int newIndex = newLength; //赋予新长度的下标
int originIndex = originallLength; //赋予原始数据的下标
while (originIndex >= && newIndex > originIndex){ //开始遍历,当原始下标越界或者新下标与原始下标持平便退出
if (str[originIndex] == ' '){ //当有空格时候,新数组的小标往前移动三个位置
str[newIndex --] = ''; //加入%20数据
str[newIndex --] = '';
str[newIndex --] = '%';
}else{
str[newIndex --] = str[originIndex]; //正常情况下,将前面的数据向后挪动
}
originIndex --; //原始下标往前移动
}
}
};
Python Code:
# -*- coding:utf-8 -*-
class Solution:
def replaceSpace(self, s):
# write code here
# s 源字符串
# write code here
s = list(s)
count=len(s)
for i in range(0,count):
if s[i]==' ':
s[i]='%20'
return ''.join(s)
总结:
根据需求,衡量的准则是时间和空间。
若以时间换空间,则采用第一种方法,只需要申请其空格数量两倍的空间。
若以空间换时间,则直接另外申请一块空间,遇到直接替换即可。
若在数组中遇到前面的元素的操作会影响到后面的元素,可以考虑从面操作,前天是存储空间的充足。如果从前面操作,就不停的对后面数据进行造成影响,依次迭代,就会出现重复操作的,虽然可以,但是时间效率会比较高。若从后面操作就会只有一次操作了。
《剑指offer》替换空格的更多相关文章
- 剑指Offer 替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 替换空格,先遍历一遍记 ...
- 剑指Offer——替换空格
题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 如果从前往后替换空格,那 ...
- 剑指offer —— 替换空格
1.问题:请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.思路:可能首先想到的应该就是 ...
- 用js刷剑指offer(替换空格)
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 牛客网链接 js代码 func ...
- 剑指offer替换空格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串
[算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...
- 剑指offer——替换字符串
总结:先计算出总共有多少空格,count++:然后从后往前遍历,每遇到一个空格,count--: 替换空格 参与人数:2119时间限制:1秒空间限制:32768K 通过比例:20.23% ...
- 剑指offer 替换字符串中的空格
void replaceSpace(char *str,int length) { ) return; ; ; ; while(str[originlen]!='\0') { if(str[origi ...
- 剑指Offer-2.替换空格(C++/Java)
题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 题意明确,就是将一个字符 ...
- 剑指Offer_5_替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成"%20". 例如,当字符串为We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 在网络编程 ...
随机推荐
- ECLIPSE最常用快捷键排名
快捷键应该是节省时间的一个要素 ,所以自己在网上找了下面这些快捷键, 以便让更多的程序员更快捷的使用Eclipse. ECLIPSE最常用快捷键排名 1. Alt + / 自动完成 2. Ctrl + ...
- canvas粒子背景
- 7.4mybatis整合ehcache(mybatis无法实现分布式缓存必须和其他缓存框架整合)
<\mybatis\day02\14查询缓存-二级缓存-整合ehcache.av> mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache-- 这里有做本 ...
- RPO攻击 & share your mind
参考文章: https://xz.aliyun.com/t/2220 http://www.thespanner.co.uk/2014/03/21/rpo/ https://www.lorexxar. ...
- 强网杯2018 Web签到
Web签到 比赛链接:http://39.107.33.96:10000 比赛的时候大佬对这题如切菜一般,小白我只能空流泪,通过赛后看别人的wp,我知道了还有这种操作. 这个赛题分为3层 第一层 Th ...
- Django学习手册 - ORM 数据创建/表操作 汇总
ORM 查询的数据类型: QuerySet与惰性机制(可以看作是一个列表) 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它 ...
- scrapy基础 之 爬虫入门:先用urllib2来理解爬虫
1,概念理解 爬虫:抓取和保存网页信息,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容,通过分析和过滤这些 HTML 代码,实现对图片文字等资源的获取. URL:即统一资源定位符 ...
- Java的Fork/Join任务
当我们需要执行大量的小任务时,有经验的Java开发人员都会采用线程池来高效执行这些小任务.然而,有一种任务,例如,对超过1000万个元素的数组进行排序,这种任务本身可以并发执行,但如何拆解成小任务需要 ...
- C++以const 作为返回值类型的意义
const rational operator*(const rational& lhs, const rational& rhs); 很多程序员第一眼看到它会纳闷:为什么operat ...
- CF1097F Alex and a TV Show
题目地址:CF1097F Alex and a TV Show bitset+莫比乌斯反演(个人第一道莫比乌斯反演题) 由于只关心出现次数的奇偶性,显然用bitset最合适 但我们并不直接在bitse ...