leetcode 剑指 Offer 05. 替换空格
题目描述:
请实现一个函数,把字符串 s 中的每个空格替换成**“%20”**。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
解题分析:
方法:原地修改
根据题意,因为要将字符串中空格替换为 “%20” ,总字符数增加,所以首先将字符串扩充为替换后的大小,也就是说字符串长度变为:原字符串长度 + 2 * 空格的个数。然后利用双指针从后向前遍历字符串,i 指向原字符串末尾, j 指向新字符串尾末尾;当 i = j 时则结束遍历。当 s[i] 不为空格时, s[j] = s[i] ;
否则将字符串 s[j-2, j] 修改为 “%20” ;然后 j -= 2 。最后返回 s即可。
时间复杂度:O(n)。
public:
string replaceSpace(string s) {
int n = s.size();
int cnt = 0;
//统计空格个数
for (auto c: s) {
if (c == ' ') cnt++;
}
//更改字符串大小
s.resize(n + cnt*2);
//从后往前遍历
for (int i = n - 1, j = s.size() - 1; i < j; i--, j--) {
if (s[i] != ' ') s[j] = s[i];
else {
s[j] = '0';
s[j - 1] = '2';
s[j - 2] = '%';
j -= 2;
}
}
return s;
}
};