題目描述
python:
python直接用replace函數(shù),一行搞定,但是有點無理取鬧了。
class Solution:
def replaceSpace(self, s: str) -> str:
return s.replace(" ","%20")
python中字符串這種類型不可以被修改分飞,所以只能采取復(fù)制的思想,也就是再創(chuàng)建一個list睹限,用來復(fù)制s中的字符譬猫,再在復(fù)制的過程中把空格替換成%20。這種方式要注意的是羡疗,復(fù)制過后的res列表中染服,每個字符是單獨的,需要在返回的時候再用join函數(shù)叨恨,把引號替換掉柳刮。
class Solution:
def replaceSpace(self, s: str) -> str:
res = []
for c in s:
if c == ' ': res.append("%20")
else: res.append(c)
return "".join(res)
C++:
在C++中,字符串可以被修改痒钝,是可變類型秉颗。所以思路是開辟一個新的字符串,長度為new送矩,那么new=原來字符串長度+空格數(shù)量*2蚕甥。
class Solution {
public:
string replaceSpace(string s) {
//先統(tǒng)計空格數(shù)量
int count = 0;
int ori_len = s.size();
for (char c:s){
if(c==' ') count++;
}
int new_len = ori_len + count*2;
s.resize(new_len);
for(int i = ori_len-1, j = new_len-1 ; i<j; i--, j--){
if (s[i]!=' '){
s[j] = s[i];
}
else{
s[j-2] = '%';
s[j-1] = '2';
s[j] = '0';
j-=2;
}
}
return s;
}
};
這里也是參照別人的題解,理解了后再自己手動敲一遍的栋荸。感覺從后往前遍歷的思想其實很難想到菇怀,但只要手動畫一個例子就很好理解。
手動畫的例子(可能只有我自己能看懂)
也就是說開辟了新的空間后晌块,我們的首要目標就是先把原來字符串的元素“向后移”敏释,再依次用“%20”填補這個字符前面的空格。所以這樣一來摸袁,我們只能選擇從后向前移動index,不然就會混亂义屏。