解题思路和代码:
/*************************************************************************
> File Name: URL.cpp
> Author: 念念
> Mail: 2845906049@qq.com
> Created Time: 2021年08月26日 星期四 18时43分09秒
> Function: URL化。编写一种方法,将字符串中的空格全部替换为%20。
假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
示例:输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith
************************************************************************/
#include <iostream>
#include <string>
using namespace std;
//思路:由于有足够的空间存放新增字符,因此从后往前遍历,遇到空格就换为%20,
//这样做不需要整体移动大块数据,效率更高
//效果:99.63% 63.68%
string URL(string S,int length)
{
int p = S.size() - 1;
for(int i = length - 1; i >= 0; i--)
{
if(S[i] == ' ')
{
S[p--] = '0';
S[p--] = '2';
S[p--] = '%';
}
else
{
S[p--] = S[i];
}
}
return S.substr(p+1); //裁剪掉多余的部分
}
int main()
{
cout << URL("Mr John Smith ", 13) << endl;
cout << URL("ds sdfs afs sdfa dfssf asdf ",27) << endl;
}