Cracking the Coding Interview 4.


原题描述

编写一个方法,将字符串中的空格全部替换成“%20”。假定字符串尾部有足够的空间存放新增字符,并且知道字符串的真实长度。

算法

Tips:

  • 处理字符串问题的时候,常见的:从尾部编辑,从后向前反向操作
  • 关于C++的cin使用用法

Ideas:

  1. 遍历一遍,数出空格数,并计算新的字符串长度
  2. 再从后往前遍历一遍,并修改原数组

Algo:

定义spaceCounts,newLength,i(循环变量)
遍历原数组:
	判断[i]处是否等于' ':
		若是,则找到一个空格,spaceCounts++
根据spaceCounts计算新的字符串长度newLength
赋值新字符串的'\0'结束符
从 length-1 开始向前遍历原串:
	如果 [i] 处是 ' ':
		对新字符串的3个位置进行赋值
		newLength-=3
	否则 :
		把旧串[i] 复制到 新串的相应位置
		newLength-=1

C++代码

void replaceSpaces(char* str, int length) {
  int spaceCounts = 0, newLength = -1, i = -1;

  for (i = 0; i < length; i++) {
    if (str[i] == ' ') {
      spaceCounts++;
    }
  }

  newLength = length + 2*spaceCounts;
  str[newLength] = '\0';

  for (i = length - 1; i >= 0; i--) {
    if (str[i] == ' ') {
      str[newLength - 1] = '0';
      str[newLength - 2] = '2';
      str[newLength - 3] = '%';
      newLength -= 3;
    }
    else {
      str[newLength - 1] = str[i];
      newLength -= 1;
    }
  }
}

Bug Free Procedure

  • 2017.01.16 Bingo!!!一次性AC


本作品由 Marvin.Cao 创作,采用 CC BY-NC-SA 3.0 许可协议 进行许可。

Comments