您现在的位置是:首页 >学无止境 >【九章斩题录】C/C++:替换空格(JZ5)网站首页学无止境
【九章斩题录】C/C++:替换空格(JZ5)
简介【九章斩题录】C/C++:替换空格(JZ5)
精品题解 ? 《九章斩题录》 ? 猛戳订阅
? 目录:
「 法三 」反向替换(利用 rfind + replace)
JZ5 - 替换空格
? 题目:请实现一个函数,将一个字符串 中的每个空格替换成 " %20 " 。例如当字符串为 We Are Happy. 则经过替换之后的字符串为 We%20Are%20Happy 。
? 示例:I/O
输入:"We Are Happy"
返回:"We%20Are%20Happy"
输入:" "
返回:"%20"
✅ 模板:C语言
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
char* replaceSpace(char* s ) {
// write code here
}
✅ 模板:C++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
string replaceSpace(string s) {
// write code here
}
};
「 法一 」暴力美学
? 思路:两次循环遍历整个数组,第一次循环寻找空格的位置,第二次循环将空格后的字符整体后移 2 个单位 (腾出空间给 %20),然后再将 %20 插入即可。因为 ''%20'' 为 3 个字符,分别是 (%, 2, 0),因为空格处用来放置 '%',所以只需腾出 2 个空间给 '2' 和 '0' 即可。
循环次数为两次,因此时间复杂度为 ,空间复杂度为 。
? 代码演示:C++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
string replaceSpace(string s) {
// 统计空格数
int i = 0;
int count = 0;
for (i = 0; i < s.size(); i++) {
if (s[i] == ' ') {
count++;
}
}
// 重新开大小,大小为 旧字符串大小 + 空格数 x 2
// 这样就有足够的位置放 %20了
// 原字符串空格放%,新开的放 2 和 0
s.resize(s.size() + count * 2);
i = 0;
int j = 0;
while (i < s.size()) {
if (s[i] == ' ') {
// 整体后移两个单位
for (j = s.size() - 1; j > i + 2; j--) {
s[j] = s[j - 2];
}
s[i] = '%';
s[i + 1] = '2';
s[i + 2] = '0';
}
else {
i++;
}
}
return s; // 返回原字符串
}
};
「 法二 」另开数组
? 思路:我们直接重新开一个字符数组,依次读取原整个字符串的内容,读到空格就在后面加上 '‘%20'' 然后继续读。其主要思路如下:
① 创建一个新的字符型数组,用于存放替换空格后的字符串。
② 从头到尾遍历字符串 ,遍历到