失業する1日目ソードフィンガーオファー5.スペースを交換する

流行の影響で家にしかなりません。実験室のない雰囲気は完全に塩漬け魚になり、小さな紙は先生に戻されませんでした。今日、私は刀と指の指を磨くプロセスを記録し始めました。
ニャー、この質問は2時間近く経過しています。これは非常に単純な質問でした。ボタンの文字列にはスペースの制限があります。境界を越えるとエラーが報告されます。最後に、サイズを変更して解決しました。最初に
トピックを見て
ください。文字列sの各スペースを "%20"に置き換える関数を実装してください。

例1:
入力:s = "We are happy。"
出力: "We%20are%20happy。"

この質問で使用するアイデアは、文字列を後ろから前に書き換えることです。ここでは、まず文字列の長さとスペースの数を数える必要があります。これは、whileループで解決できます。文字列の終わりは「\ 0」記号です。カウントを停止し、forループを使用して解決することもできます。とにかく、s.size()とs.lengthを使用して文字列の長さを取得できます。書き換え後に必要なスペースの量を計算した後、書き換え後=書き換え前+ 2 *スペース数、この質問を理解する必要があります。
次に、2つのポインターを宣言します。ポインター1は書き換え前の最後のビットを指し、ポインター2は書き換え後の最後のビットを指します。通常の状況では、2つのポインターはサイクルごとに1スペース左にシフトされ、ポインター1の値がポインターに割り当てられます。 2.ポインター1がスペースをポイントした後、1クリックでポインター1が左に移動し、2つのポインターが同じインデックスであっても、ポインター2に「0」、「2」、および「%」を書き込み、左に3回移動します。できました。
コードは次のとおりです。

class Solution {
public:
    string replaceSpace(string s) {
        
        int num_space = 0;
        int length_1 = 0;
        
        int i = 0;
        while(s[i] != '\0')
        {
            if (s[i] == ' ')
            num_space++;
            length_1++;
            i++;
        }
      
        cout<<num_space<<endl;
        cout<<length_1<<endl;
        int length_2 = length_1 + 2*num_space;
        cout<<length_2<<endl;
        s.resize(length_2);
        while(length_1>=0 &&length_2>length_1)
        {
            if (s[length_1] == ' ')
            {
                cout<<'a'<<length_2<<'\t'<<length_1<<endl;
                
                s[length_2] = '0';
                cout<<s[length_1]<<'\t'<<s[length_2]<<endl;
                length_2--;
                s[length_2] = '2';
                cout<<s[length_1]<<'\t'<<s[length_2]<<endl;
                length_2--;
                s[length_2] = '%';
                cout<<s[length_1]<<'\t'<<s[length_2]<<endl;
                length_2--;
                
                length_1--;
                
            }
            else 
            {
                cout<<'b'<<length_2<<'\t'<<length_1<<endl;
                
                s[length_2] = s[length_1];
                length_2--;
                length_1--;
                cout<<s[length_1]<<'\t'<<s[length_2]<<endl;
                
                
            }
            
        }
        return s;
    }
    
};


ダブルポインターメソッドはバックルで非常に古典的であることに注意してください。これを使用することを学ぶ必要があります。
文字列は '\ 0'で終了します。s.size()とs.length()は長さを計算できます。
境界を越えたくない場合は、サイズ変更を使用してくださいこの関数は境界を拡張します。以前に別の文字列を宣言することを考えましたが、サイズを宣言する必要があり、面倒です。私は多くの時間を無駄にしました。
質問をブラッシングすることは、問題解決の経験を蓄積するプロセスであると、オリーは言います!
夕方、別のもののために戦います。

オリジナルの記事を3件公開 Likes0 Visits15

おすすめ

転載: blog.csdn.net/qq_41227231/article/details/105664624