LeetCodeはオファー05を参照します。スペースを置き換えます

文字列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;
    }
};

おすすめ

転載: blog.csdn.net/tus00000/article/details/112968661