题目来源:LintCode
原题地址:http://www.lintcode.com/zh-cn/problem/space-replacement/
题目:
设计一种方法,将一个字符串中的所有空格替换成 %20
。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。
Yes
样例
对于字符串"Mr John Smith"
, 长度为 13
替换空格之后的结果为"Mr%20John%20Smith"
注意
如果使用 Java 或 Python, 程序中请用字符数组表示字符串。
难度级别:
容易
容易
思路分析:
此题较为简单,需要注意的是:所谓的“真实的”字符长度,指的是实际字符的数量,不包含末尾的终止符'\0';
这道题的解题策略采用的是,先计算替换之后的字符串的长度(题目中说明有足够的空间,因此我们不需要考虑这一点,若没有说明,可能还需要开辟新的存储空间),然后从末端开始进行置换操作。遇到空格则用%20替换,否则正常复制即可。
此题较为简单,需要注意的是:所谓的“真实的”字符长度,指的是实际字符的数量,不包含末尾的终止符'\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开始的原因。
实现代码中需要说明的是,字符串数组最后一位是终止符'\0',也是需要保留下来的。
这样就是第二个for循环从lenght开始的原因。