题目描述
请实现一个函数, 将一个字符串中的每个空格替换成 " ". 例如, 当字符串为 We Are Happy. 则经过替换之后的字符串为 We Are Happy.
个人感悟: 操作原字符串, 要考虑操作的次数问题, 这题的点在于替换后的字符串长度改变, 所有应该想到的是计算空格数量, 然后选择操作的方向,
这里如果从前方开始, 每次改变都要改变后面每一个字符, 而从尾端进行操作, 进行操作的字符就少了很多, 最坏的情况就是空格集中在头部, 这时
和从头部操作效率一致, 所以选尾端进行改变字符串.
直接上代码:
- class Solution {
- public:
- void replaceSpace(char *str,int length) {
- int count = 0; // 计算空格的数量
- for(int i = 0; i <length; i++){
- if(str[i] == ' ') count++;
- }
- if(count == 0 || length <= 0) return; //no space
- for(int i = length - 1; i>= 0; i--){
- if(str[i] != ' ') {
- str[i + 2*count] = str[i];
- }
- else{
- count--; // 每次替换都要减少 count
- str[i + 2*count] = '%';
- str[i + 2*count + 1] = '2';
- str[i + 2*count + 2] = '0';
- }
- }
- }
- };
来源: http://www.bubuko.com/infodetail-3501368.html