您的位置:首页 > 职场人生

空格替换(LintCode)

2015-10-25 18:08 393 查看
题目来源:LintCode
原题地址:http://www.lintcode.com/zh-cn/problem/space-replacement/
题目:

设计一种方法,将一个字符串中的所有空格替换成 
%20
 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。

您在真实的面试中是否遇到过这个题? 

Yes

样例

对于字符串
"Mr John Smith"
, 长度为 
13

替换空格之后的结果为
"Mr%20John%20Smith"


注意

如果使用 Java 或 Python, 程序中请用字符数组表示字符串。

难度级别:

容易


思路分析:

此题较为简单,需要注意的是:所谓的“真实的”字符长度,指的是实际字符的数量,不包含末尾的终止符'\0';

这道题的解题策略采用的是,先计算替换之后的字符串的长度(题目中说明有足够的空间,因此我们不需要考虑这一点,若没有说明,可能还需要开辟新的存储空间),然后从末端开始进行置换操作。遇到空格则用%20替换,否则正常复制即可。


实现代码:
class Solution
{
public:
/**
* @param string: An array of Char
* @param length: The true length of the string
* @return: The true length of new string
*/
int replaceBlank(char string[], int length)
{
if (length == 0)
{
return 0;
}
int cnt = 0;
for (int i = 0; i < length; i++)
{
if (string[i] == ' ')
{
cnt++;
}
}
int j = length + 2 * cnt;
for (int i = length; i >= 0; i--)
{
if (string[i] == ' ')
{
string[j--] = '0';
string[j--] = '2';
string[j--] = '%';
} else
{
string[j--] = string[i];
}
}
//string[length + 2 * cnt] = '\0';
return length + 2 * cnt;
}
};


代码说明:

实现代码中需要说明的是,字符串数组最后一位是终止符'\0',也是需要保留下来的。

这样就是第二个for循环从lenght开始的原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息