、にそれぞれのスペースを置き換えるために、文字列関数を実装してください「20%。」例えば、文字列があるとき、私たちは幸せです。文字列が後に我々%20Are%20Happy交換後。
https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423
背面から前面への置き換え
二つのポインタ:k個の元の文字列の長さの端を指す(すなわち、「\ 0」で)、P点列の最後の文字から逆方向を横切る、文字列の長さの終了後、「20%」のスペースを置き換えるために、充填に一つずつ場所は、pによって指されます。
O(n)
クラスのソリューション{ パブリック: 無効 replaceSpace(CHAR * STR、INT 長){ int型 CNT = 0 ; のため(int型 I = 0 ; I <長さI ++ ){
//文字列内のスペースの数をカウントする IF(STR [I ] == ' ' ) CNT ++ ; } INT LEN =長さ* CNT + 2 ; //元の長さの新しい長さを増大した長さ+交換後 INT K =長さ、P = LEN; ながら(K> = 0 && K < P){ IF(STR [K]! = ' ' ){ STR [I] = STR [K]。 P - ; K - ; } 他の{ STR [P - ] = ' 0 ' 。 STR [P - ] = ' 2 ' 。 STR [P - ] = ' %' 。 K - ; } } } }。
要約:バックに前方からのデジタルコピーの各々は、モバイルデジタル複数回繰り返される場合、二つの配列(または文字列)をマージ前方へ後方からコピーと考えることができます。