题目:实现一个函数,把字符串的每一个空格替换成“%20”。例如输入“we are happy.",则输出”we%20are%20happy."
方法1.
从头到尾扫描字符串,每一个碰到空格字符的时候做替换。由于是把一个字符替换成三个字符,我们必须要把空格后面所有的字符都向后移动两个字节,否则就有两个字符被覆盖了。
代码如下:
#include<iostream>
using namespace std;
#define MAX 80
void Sp_Replace(char *str)
{
for(int i=0;str[i]!='\0';i++)
{
if(str[i]==' ')
{
for(int j=strlen(str)+2;j>=i+3;j--)
{
str[j]=str[j-2];
}
str[i]='%';
str[i+1]='2';
str[i+2]='0';
}
}
}
int main(void)
{
char *str=(char *)malloc(sizeof(char )*MAX);
cout<<"enter the string str"<<endl;
gets(str);
Sp_Replace(str);
puts(str);
return 0;
}
时间复杂度为0(n^2),效率太低
方法2.从字符串的后面开始复制和替换,准备两个索引,indexofNew 指向替换之后的字符串的末尾,indexofOriginal指向原始字符串的末尾。接下来向前移动指针indexofOriginal,逐个把它指向的字符复制到indexofNew的位置,直到碰到第一个空格为止,碰到第一个空格之后,把indexofOriginal移动1个位置,在indexofNew之前插入字符串"%20",此时indexofNew需向前移动三个位置。
代码:
#include<iostream>
using namespace std;
void Sp_Replace(char str[],int length)
{
int originalLength=0;
int numberofBlank=0;
int indexofNew;
int indexofOriginal;
if(str==NULL && length<=0)
{
return ;
}
int i=0;
while(str[i]!='\0')
{
originalLength++;
if(str[i]==' ')
{
numberofBlank++;
}
i++;
}
indexofNew=originalLength+2*numberofBlank;//一个索引指向新字符串的尾部
indexofOriginal=originalLength;//一个索引指向旧字符串的尾部
while(indexofOriginal>=0 && indexofNew>indexofOriginal)
{
if(str[indexofOriginal]==' ')
{
str[indexofNew--]='0';
str[indexofNew--]='2';
str[indexofNew--]='%';
}
else
{
str[indexofNew--]=str[indexofOriginal];
}
indexofOriginal--;
}
}
int main(void)
{
char str[80];
cout<<"input the originak string:"<<endl;
gets(str);
Sp_Replace(str,80);
cout<<"the new string is:"<<endl;
puts(str);
}
时间复杂度为O(n)
分享到:
相关推荐
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入:每个输入件仅包含一组测试样例。对于每组测试案例,输入一行代表要处理的字符...
面试题 2:替换空格(考点: 字符串) 2 面试题 3:从尾到头打印链表(考点: 链表) 2 面试题 4:重建二叉树(考点: 树) 4 面试题 5:用两个栈实现队列(考点: 栈和队列) 5 面试题 6:旋转数组的最小数字(考点:...
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 解题思路参考:...
1、剑指解析: 2、特殊用例: 3、代码实现: I、原地双指针(从后向前复制) 从后向前复制是《剑指》推荐的一种解法,可以适用于各种编程语言。每' '比' '多两个字符。两个指针都是从后向前。通过先统计字符串...
面试题4 替换空格 面试题5 从尾到头打印单链表 面试题6 重建二叉树 面试题7 用两个栈实现队列 2.4 算法和数据操作 面试题8 旋转数组的最小数字 面试题9 斐波那契数列 面试题10 二进制中1的个数 第3章 高质量代码 3.3...
道常见的程序员面试题,这些题目偏向中低难度,是入门上手不错的选择。另外这些题目基本上在各大 OJ 上也都有,可以非常方便地提交自己的实现进行练手。 如果刚开始练习算法题目,「剑指 Offer」是个不错的切入点。...
《剑指offer》,从名字上看虽不是一本系统的算法书,但很多师兄师姐都推荐它,因为很多互联网公司的面试算法题都能这本书上找到思路,链表,二叉树,图,查找,排序,时间空间的优化,队列,栈,覆盖面比较广且不...
面试题05:替换空格 +2 查找 面试题06:从尾到头打印链表 +2 栈+双数组 面试题07:重建二叉树 +2 递归 面试题09:用两个栈实现队列 +2 双栈 面试题10 - I:斐波那契数列 +2 动态规划+递归 面试题10 - II:青蛙跳台阶...
每日刷题计划,记录做过的题目,内容包含剑指offer、程序员面试金典(CTCI)、数据结构 下面标题括号内的为对应包名 剑指offer(offer) java实现 03二维数组中的查找 04替换空格 05从尾到头打印链表 06重建二叉树 07用...
剑指Offer的Python解答 剑指Offer的Python解答,不断更新。如果数学公式无法正确显示,可以clone到本地查看,或者尝试使用Chrome插件“MathJax Plugin for Github”。 什么是剑指Offer? 精选谷歌、微软等知名IT企业...
剑指offer(第二版) 序号 题目列表 C实现 Python实现 Java实现 学习笔记 面试题03 数组中重复的数字 面试题04 二维数组中的查找 面试题05 替换空格 面试题06 从尾到头打印链表 面试题07 重建二叉树 面试题09 用两个栈...
剑指Offer(Python多种思路实现):表示数值的字符串 面试20题: 题目:表示数值的字符串 题:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100″,”5e2″,”-123″,”3.1416″和”-1E...
替换空格(简单)][] 经典atoi(),注意范围越界处理 题型 找规律题 第二讲:找规律题 [面试题 01.08. 零矩阵 (简单)][] [剑指 Offer 61. 扑克牌中的顺子(中等)][] [面试题 16.11. 跳水板(简单...
leetcode卡 LeetCode 每日一练 时间 序号 题目 03-01 P225 ...剑指offer 序号 题目 03 数组中重复的数字 04 二维数组中的查找 05 替换空格 06 从尾到头打印链表 07 重建二叉树 09 用两个栈实现队列 12
这一题比《剑指Offer》刷题笔记——面试题46. 把数字翻译成字符串麻烦了些,因为这里,0是不能翻的。 2、代码实现 class Solution: def numDecodings(self, s: str) -> int: dp = [0] * len(s) # 考虑第一个...
剑指Offer编程题目录 二维数组中的查找: 替换空格: 从尾到头打印链表: 重建二叉树: 用两个栈来实现队列: 旋转数组的最小数字: 斐波那契数列: 跳台阶: 跳台阶2: 矩形覆盖: 二进制中1的个数 数值的整数次方: 调整数组...
leetcode题库 后端开发 操作系统 计算机网络 C++基础知识 数据库 笔试常考类型 模拟 ★★★★★ 可难可易 大部分题都是模拟中使用某个算法优化 ...剑指offer先刷 + leetcode以下各类型至少10道+leetc