题目:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
class Solution {
public:
string replaceSpace(string s) {
//1、使用C++新特性
//执行用时:4 ms, 在所有 C++ 提交中击败了27.34%的用户
//内存消耗:6.1 M, 在所有 C++ 提交中击败了67.72%的用户
string array; //存储结果
for(auto &c:s) //遍历原字符串
{
if(c==' ')
{
array.push_back('%');
array.push_back('2');
array.push_back('0');
}
else
{
array.push_back(c);
}
}
return array;
//2、使用string::insert()直接插入
//执行用时:0 ms,在所有 C++ 提交中击败了 100.00% 的用户
//内存消耗:6 MB,在所有 C++ 提交中击败了 85.65% 的用户
for(int i=0;i<s.size();i++)
{
//单个字符要使用 单引号
if(s[i]==' ')
{
s[i]='0';
s.insert(i,"%2");
}
}
return s;
//3、先统计格子数,再倒叙便利修改
//执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
//内存消耗:5.9 MB, 在所有 C++ 提交中击败了98.28%的用户
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;
//4、双指针
int len=s.size(),count=0;
for(int i=0;i<len;i++){
if(s[i]==' ') count++;
}
int left=len-1,right=left+2*count;
s.resize(right+1);
while(right!=left){
if(s[left]!=' '){
s[right]=s[left],right--,left--;
}else{
s[right--]='0',s[right--]='2',s[right--]='%',left--;
}
}
return s;
}
};
如果要进行使用请一种一种方法来。
还有一种方法:直接调用replace(),将空格替换成%20。
题目和解答方法来源:力扣(LeetCode)