提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
剑指 Offer 05. 替换空格
字符串处理
String类的构造函数和析构函数如下:
a) string s; //生成一个空字符串s
b) string s(str) //拷贝构造函数 生成str的复制品
c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值
d) string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值
e) string s(cstr) //将C字符串作为s的初值
f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。
g) string s(num,c) //生成一个字符串,包含num个c字符
h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
i) s.~string() //销毁所有字符,释放内存
可有操作:
- =、assign()赋值 //str4.assign(“gaint”);
- swap()交换;//str2.swap(str1);
- +=,append(),push_back() //在尾部添加字符
- insert() //插入字符
- ……其他的有需要再看
一、直接暴力遍历
class Solution {
public:
string replaceSpace(string s) {
string res;
for(int i=0;i<s.length();i++){
if(s[i] == ' ') res += "%20";
else res+= s[i];
}
return res;
}
};
二、简单函数调用
直接用s.replace(" “,”%20");
三、题解原地修改方法
需要将空格替换为 “%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;
}
};
作者:jyd
链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof/solution/mian-shi-ti-05-ti-huan-kong-ge-ji-jian-qing-xi-tu-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总结
字符串的操作后面再慢慢学吧