📣🥳🥳🥳📣
✨Hello! 如果这篇【文章】对你有帮助😄,希望可以给博主点个赞👍鼓励一下😘
📣🥳🥳🥳📣
![](https://i-blog.csdnimg.cn/blog_migrate/791bab4bb9248bcf069bda54a59f09cd.jpeg)
🔎 题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:0 <= s 的长度 <= 10000
📝 解题方法
【string
类型的题目】
这道题涉及字符串的拼接问题,拼接的方式有多种(字符数组,即C风格字符串
建议少用,最好不用)。
📌 拼接操作
1️⃣’+'操作符
class Solution {
public:
string replaceSpace(string s) {
string temp;
//将字符串s中的每个字符都拼接到字符串temp中,对于空格字符用“%20”替代拼接
for (auto ch : s) {
if (isspace(ch)) {
temp += "%20"; //temp = temp + %20"效率可能比较低
continue;
}
temp += ch;
}
return temp;
}
};
👇参考自C++中string的拼接
str =str+ "%20"
运算产生的是一个新的对象,再把结果返回,而str += "%20"
涉及到的应该是对象的引用,操作之后直接返回引用,避免了产生新的对象。因此,两者的性能有一定的差距。
时间复杂度O(N);
空间复杂度O(1)。
2️⃣ stringstream
类
《C++ Primer》第八章,这个类一般用于【数据转换】。在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。
<sstream>
定义了三个类:istringstream
、ostringstream
和 stringstream
,分别用来进行流的输入、输出和输入输出操作。<sstream>
主要用来进行数据类型转换,由于 <sstream>
使用 string
对象来代替字符数组(snprintf 方式),避免了缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符号的问题。简单说,相比 C 编程语言库的数据类型转换,<sstream>
更加安全、自动和直接。
class Solution {
public:
string replaceSpace(string s) {
//1.字符串流ss
stringstream ss;
for (auto ch : s) {
if (isspace(ch)) {
ss << "%20";
continue;
}
ss << ch;
}
//2.字符串流输出给字符串对象s
ss >> s;
return s;
}
};
时间复杂度O(N);
空间复杂度O(1)。
✨如有问题欢迎在底下评论留言或私信!
如果这篇【文章】对你有帮助😄,希望可以给博主【点个赞👍】鼓励一下😘
❤️Thanks for your encouragement❤️