剑指Offer05.替换空格
写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点
1.扩容+倒序遍历+双指针 3
- 首先计算有多少个空格,然后对数组进行扩容,然后反向遍历原数组,判断是空格填入替换,不是的话填入原数组
class Solution {
public:
string replaceSpace(string s) {
int l1 = s.length() - 1;//获取字符串长度
for (int i = 0; i <= l1; i++) {
if (s[i] == ' ') {
s += "00";//注意这里的双引号,如果是多个字符就要用双引号
}
}
int l2 = s.length() - 1;
if (l2 <= l1) {
return s;
}//如果扩容后无变化,说明原来无空格不需要更换
for (int i = l1; i >= 0; i--) {
char c = s[i];
if (c == ' ') {
s[l2--] = '0';
s[l2--] = '2';
s[l2--] = '%';
} else {
s[l2--] = c;
}
}
return s;
}
};
2.新建string
- 新建一个string,利用c++特性,遇到空格就输入
class Solution {
public:
string replaceSpace(string s) {
string ans;
for (auto i:s){//使用auto&代表可以改变值,
if(i==' ') {
ans.push_back('%');
ans.push_back('2');
ans.push_back('0');//push_back不能插入“%20”
}
else{
ans.push_back(i);
}
}
return ans;
}
};
时间复杂度/空间复杂度分析/面试场景如何作答
- 首先询问面试官是否是在原字符串修改,能否保证有足够的空间后面容量是否够,选择不同方法
知识点及反思
- string相关操作string相关操作
- c++中单引号和双引号区别
- auto 与 auto& 区别
- 不清楚小知识点,可以在代码里做个小实验,搞清楚,程序员嘛
- 发现还是要看一下剑指offer这本书,尤其是对于我这种转行的人来说