[剑指Offer]替换空格
今天看题的时候,遇到一个替换空格的题目,分析一下哈。
题目要求:把字符串中的每个空格替换成“%20”。例如输入“we are happy”,则输出“we%20are%20happy”。
解题思路:我们首先想到的是:移位思想。遇到空格就将空格后的所有字符后移两位,然后填充空格为%20。
实现代码:
#pragma once
#include<assert.h>
#include<string.h>char* StrReplace(char* str,size_t length)
{assert(str && length > 0);char *p = str;char *p1 = str;size_t len = strlen(str)+1;size_t i = len;while(p){while(*p != ' '){p++;if(*p == '\0'){return str;}}while((p1+i) != p){*(p1+i+1) = *(p1+i-1);i--;}len+=2;i = len;*p = '%';*(p+1) = '2';*(p+2) = '0';p+=2;}return str;
}void Test()
{char str[20] = "we are happy";cout<<StrReplace(str,20)<<endl;
}
但是,我们再看看它的时间复杂度哈。显然,每次移位操作都是O(N),这样经过多次移位,使它的时间复杂度就变为O(N^2)。这样的效率实在有点低。我们如何提高它的时间复杂度呢?
思路2:我们可以用计数的方式,统计字符串中总共的空格数,然后从后向前移位,使用两个指针,p1指向字符串开始的位置,p2指向字符串尾部,移位将p2移动2*空格个数位,遇到空格后填充,直到两指针相遇,才停止移位。如图所示(移位过程):
实现代码:
#pragma once
#include<assert.h>
#include<string.h>
char* StrReplace(char* str,size_t length)
{assert(str && length > 0);char *p = str;char *p1 = NULL;char *p2 = NULL;size_t len = strlen(str);int count = 0;//统计空格数while(*p != '\0'){if(*p == ' ')count++;p++;}count*=2;p1 = str+len; //指向字符串尾p2 = str+len+count; //指向修改后字符串正确的位置while(p1 != p2){if(*p1 == ' '){p2 -= 2;*p2 = '%';*(p2+1) = '2';*(p2+2) = '0';if(p1 != p) //如果p1没有到字符串头时再减,防止越界{p1--;p2--;}}else //不是空格则直接后移{*p2 = *p1;p1--;p2--;}}return str;
}void Test()
{char str[20] = "we are happy";cout<<StrReplace(str,20)<<endl;char str1[20] = " are happy";cout<<StrReplace(str1,20)<<endl;
}
执行结果:
[剑指Offer]替换空格相关推荐
- 剑指Offer 替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 替换空 ...
- python剑指offer替换空格_《剑指offer》2-替换空格【Java+Python】
替换空格 1. 题目描述 请实现一个函数,将一个字符串中的空格替换成"%20". 2. 示例 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%2 ...
- python剑指offer替换空格_迷人的算法-剑指offer面试题5:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成"%20". 例如,输入"We are happy.",则输出"We%20are%20happy.&q ...
- [剑指offer] 替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 刚开始用rep ...
- python剑指offer替换空格_02_替换空格【python】
1.题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.思 ...
- 剑指offer 替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. java 解 ...
- python剑指offer替换空格_《剑指Offer》字符串 替换空格
//str.replace(char oldChar,char newChar);用字符newChar替换oldChar;返回一个新的字符串 public class Solution { publi ...
- 剑指Offer替换空格问题
1.题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.代 ...
- 【模拟遍历】剑指offer:替换空格
请实现一个函数,将一个字符串s中的每个空格替换成"%20". 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 定义res,遍历 ...
最新文章
- Sql server Insert执行的秘密(下) 带外键的INSERT分析
- 第十、十一周项目一-点-圆-圆柱类族的设计(1)
- python第三方库安装-python的第三方库安装
- [CS101] 转载:浅议Fibonacci(斐波纳契)数列求解
- feign 第一次调用超时_feign + hystrix 降级
- 《团对-学生成绩管理-开发环境搭建过程》
- SQLi LABS Less-8
- 底层实现红黑树_【单选题】下列数据结构中,哪一个是ArrayList类的底层实现( )
A. 数组结构 B. 链表结构 C. 哈希表结构 D. 红黑树结构...
- ABP框架系列之四十九:(Startup-Configuration-启动配置)
- ABAQUS 转子动力学载荷
- 设计模式之----依赖倒置(Dependency inversion principle)的理解
- oracle中同义词的用法,Oracle中定义以及使用同义词的方法
- Brightest Immaculate Teresa(简单题)(北理16校赛)
- 3dmaxobj导出选项_怎么解决在3dmax中导出obj没有贴图的问题?
- sre_constants.error: unbalanced parenthesis
- kettle MongoDB数据迁移至Hbase
- 试用期没到辞职有工资吗?
- Python实现布林带策略
- linux fcitx改mac输入法,Linux安装fcitx输入法
- windows下最强大的SSH连接软件
热门文章
- [Swift]LeetCode86. 分隔链表 | Partition List
- codeforces 703B
- mybatis.net - 5 嵌入资源与引用资源
- 如何解决EDM邮件营销中的图片难题
- JavA持有类_关于继承:Java持有对象的超类的类型
- aws ec2时间_AWS中自动化的三大领域,以避免支付过多的云账单
- 基于混沌的图像置乱加密算法及matlab的实现,基于混沌的图像置乱加密算法及MATLAB的实现...
- 微pe工具箱是微软的吗_微PE工具箱V2.0更新10内核
- java none怎么用tomcat_使用tomcat做java中间件
- 《MySQL——使用联合索引、覆盖索引,避免临时表的排序操作》