题目链接
方法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;
}
};
京公网安备 11010502036488号