LC05.替换空格
题:实现一个函数把字符串中的每个空格替换成“%20”
Answer:
代码如下:
class Solution {
public:
string replaceSpace(string s) {
string temp; //定义临时字符串
for(int i=0;i<s.size();i++){
if(s[i]!=' '){
temp=temp+s[i];
}
else{
temp=temp+'%';
temp=temp+'2';
temp=temp+'0';
}
}
return temp;
}
};
Analysis:
这里是最简单的解法:
使用一个for循环将字符串s里的内容挨个存储到临时字符串temp里,嵌套一个if语句用于判断,将“ ”替换成“%20”;
一开始犯了一些错误,把%20当成了一个整体,直接进行替换,错误演示如下:
temp=temp+'%20';
这样的写法是错误的;
要考虑单个字符的问题,将“%20”拆分,挨个进行替换;
temp=temp+'%';
temp=temp+'2';
temp=temp+'0';
–Update–
官方的更优质解法:先将原字符串s进行扩充,空格占1个单位,%20占三个单位,对字符串s进行遍历,扫描出空格后进行扩充,之后在原字符串的基础上进行修改。
class Solution {
public:
string replaceSpace(string s) {
int count = 0, len = s.size();
// 统计空格数量
for (char c : s) {
if (c == ' ') count++;
}
// 修改 s 长度
s.resize(len + 2 * count);
// 倒序遍历修改
for(int i = len - 1, j = s.size() - 1; i < j; i--, j--) {
if (s[i] != ' ')
s[j] = s[i];
else {
s[j - 2] = '%';
s[j - 1] = '2';
s[j] = '0';
j -= 2;
}
}
return s;
}
};
作者:Krahets
链接:https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/50c26h/
Summary:
解法有很多种,我用的是C++语言,本文所给只是最简单的一种,笔记进行留存,日后会对比更新。