题目链接
方法1:模拟
模拟替换的过程,当我们遇到空格的时候用“%20”代替即可
时间复杂度:遍历了整个字符串,为O(n)
空间复杂度:一个字符串O(n)
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ string replaceSpace(string s) { string res = "";//这是用来储存答案的串 for (int i = 0; i < s.size(); i ++ ) { if (s[i] == ' ') res += "\%20";//注意了,要输出"%"要用转义字符 else res += s[i]; } return res; } };
方法2:用string函数
有一个函数叫string.replace(),这里介绍一下它常用的几个用法
1、用str替换从pos开始长度为len的字符
#include <iostream> #include <string> using namespace std; int main() { string s = "abc abc abc"; cout << s << endl; while (s.find(" ") != s.npos) { s = s.replace(s.find(" "), 1, "\%20"); } cout << s << endl; }
运行结果
2、用str替换迭代器的起始位置到结束位置的字符
#include <iostream> #include <string> int main() { std::string s = "abc abc abc"; std::cout << s << std::endl; s = s.replace(s.begin(), s.begin() + 2, "123"); std::cout << s << std::endl; }
运行结果
3、用重复了n次的str字符替换从pos开始长度为len的字符
#include <iostream> #include <string> int main() { std::string s = "abc abc abc"; std::cout << s << std::endl; char str = '#'; s = s.replace(s.begin(), s.begin() + 2, 3, str); std::cout << s << std::endl; }
运行结果
对于本题,我们用第一种
时间复杂度:遍历了整个字符串,为O(n),由于是给你封装好了的,带了一点小常数
空间复杂度:一个字符串O(n)
class Solution { public: string replaceSpace(string s) { while (s.find(" ") != s.npos) {当字符串中还有" "的时候,find函数返回第一个目标字符串出现的下标 s = s.replace(s.find(" "), 1, "\%20"); } return s; } };