文字列sの各スペースを「%20」に置き換える関数を実装してください。
より簡単な方法は、場所を変えて並べ替え、文字列を1回トラバースして結果の文字列に格納することです。したがって、スペースの複雑さはO(n)です。
所定の場所で並べ替える必要がある場合、スペースをトラバースするたびに、スペースの後のコンテンツがストレージの%20
ために2つのスペースに戻されるため、時間計算量はO(n²)になります。文字列を1回トラバースして新しい文字列の長さを計算し、それを後ろから前にコピーして、時間計算量をO(n)に減らすこともできます。
class Solution {
public:
string replaceSpace(string s) {
int newSz = 0;
for (char c : s) {
if (c == ' ') {
newSz += 3;
} else {
++newSz;
}
}
int oldSz = s.size();
s.resize(newSz);
--oldSz;
--newSz;
while (newSz != oldSz) {
if (s[oldSz] != ' ') {
s[newSz--] = s[oldSz--];
} else {
--oldSz;
s[newSz--] = '0';
s[newSz--] = '2';
s[newSz--] = '%';
}
}
return s;
}
};