題目
請編寫一個方法,將字符串中的空格全部替換爲“%20”。假定該字符串有足夠的空間存放新增的字符,並且知道字符串的真實長度(小於等於1000),同時保證字符串由大小寫的英文字母組成。
給定一個string iniString 爲原始的串,以及串的長度 int len, 返回替換後的string。
我的題解
string replaceSpace(string iniString, int length) {
// write code here
int i = 0, count = 0, p;
for(; i < length; ++ i)
if(iniString[i] == ' ')
count ++;
p = 2 * count + length;
char c_arr[3000];
c_arr[p --] = '\0';
for(i = length - 1; i >= 0; -- i) {
if(iniString[i] != ' ') {
c_arr[p --] = iniString[i];
}else {
c_arr[p --] = '0';
c_arr[p --] = '2';
c_arr[p --] = '%';
}
}
return string(c_arr);
}
這個題解我寫的並不滿意,因爲令我滿意的題解並不需要額外開闢數組,而是直接在原數組上進行修改,並不需要額外的空間。如下:
string replaceSpace(string iniString, int length) {
// write code here
int i = 0, count = 0, p;
for(; i < length; ++ i)
if(iniString[i] == ' ')
count ++;
p = 2 * count + length;
if(iniString.size() < p)
return "ERROR";
iniString[p --] = '\0';
for(i = length - 1; i >= 0; -- i) {
if(iniString[i] != ' ') {
iniString[p --] = iniString[i];
}else {
iniString[p --] = '0';
iniString[p --] = '2';
iniString[p --] = '%';
}
}
return iniString;
}
題目中也說了,數組足夠長,這樣解才更好。但是牛客網OJ的測試用例似乎並不符合提議,所以想要通過只能重新開一個數組了。