剑指 Offer 05.替换空格
双指针法
题目详情
请实现一个函数,把字符串 s
中的每个空格替换成"%20"
。
示例1:
输入:s = "We are happy."
输出:"We%20are%20happy."```
我的代码:
class Solution
{
public:
string replaceSpace(string s)
{
int count=0,oldsize=s.size();
for (int i = 0;i < oldsize;++i) //遍历一次统计空格个数
{
if(s[i]==' ')
{
++count;
}
}
s.resize(oldsize + count * 2); //利用resize函数扩充s
int newsize = s.size();
//双指针,i j一后一前从末尾开始向前移动
for (int i = newsize - 1,j = oldsize - 1;j < i; --i, --j)
{
//遍历老s若不是空格,则用该字符填充末尾(给一会的'20%'腾出空间)
if (s[j] != ' ')
{
s[i] = s[j];
}
else //是空格就用'20%'填充末尾
{
s[i] = '0';
s[i-1] = '2';
s[i-2] = '%';
i -= 2; //i多减2别忘记
}
}
return s;
}
};
涉及知识点:
1.双指针算法
双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。
若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。
若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。
思路:
首先扩充数组到每个空格替换成"%20"之后的大小。
然后从后向前替换空格,也就是双指针法