C ++ 833検索でLeetCodeと文字列に置き換えます

いくつかの文字列Sに、我々は新しいもの(必ずしも同じサイズ)と文字のグループを交換するいくつかの代替操作を実行します。

開始インデックスI、ソース単語xと目標語y:各交換作業は、3つのパラメータを有しています。ルールは、x iは、元の文字列Sでの位置で開始した場合、我々は、YとXの発生を置き換えるということです。そうでない場合、我々は何もしません。

「CD」は、元の文字列Sに位置2から始まるので、我々は意志その後、例えば、我々はS =「ABCD」を持っていると我々はいくつかの交換作業を持っている場合、私は= 2、X =「CD」、Y =「FFFF」、 「FFFF」と交換してください。

我々は、I = 0、X = "AB"、Y = "EEE"、ならびに他の交換作業I = 2、X = "EC" 置換操作の両方を持っている場合、S = "ABCD" の別の例を用いて、Y元の文字列にS [2] = 'C'、Xと一致しないので= "FFFF" は、この第2の動作は何もしない[0] = 'E'。

これらのすべての操作が同時に発生します。置換の任意のオーバーラップが存在しないことを保証しています:例えば、S =「ABC」、インデックスは= [0、1]、ソースは= [「AB」、「BC」]は、有効なテストケースではありません。

例1:

入力:S = "ABCD"、インデックス= [0,2]、ソース= [ "A"、 "CD"]、ターゲット= [ "EEE"、 "FFFF"]
出力: "eeebffff"
説明: ""開始S内のインデックス0で、それは「EEE」に置き換えられています。
「CDが」Sのインデックス2から始まり、それは「FFFF」に置き換えられています。
例2:

入力:S = "ABCD"、インデックス= [0,2]、ソース= [ "AB"、 "EC"]、ターゲット= [ "EEE"、 "FFFF"]
出力: "eeecd"
説明: "AB"開始S内のインデックス0で、それは「EEE」に置き換えられています。
「EC」は、元Sのインデックス2から開始していないので、私たちは何もしません。
ノート:

0 <= indexes.length = sources.length = targets.length <= 100
0 <インデックス[I] <S.length <= 1000
所与の入力のすべての文字が小文字です。


インデックスは順不同であるため、逆方向の変形は、最初によれば、対応するインデックスとソースハッシュマップを確立します。マップ[i]は、S [i]が初期ソースとターゲットに対応表します。この問題は、さまざまなアプリケーションファンクション文字列の難しさにあります。エラーが唯一の最後の数字の部分文字列に戻っていないだろうときには、バウンドのうち、+長さ-1を起動し、(開始、長さ)安全な操作であることSUBSTRに注意し、インサートとSUBSTR unordered_map C ++を確認し、並べ替え(逆)。特定のコード:

クラスソリューション{ 
パブリック:
    文字列findReplaceString(ストリングS、ベクトル<整数>&インデックス、ベクトル<ストリング>&源、ベクトル<ストリング>&ターゲット){ 
        unordered_map <整数、文字列> srcMap、TARGETMAP。
        以下のために(; iはindexes.size()<; I = 0 int型私は++){ 
            srcMap.insert(対<整数、文字列>(インデックス[i]は、ソース[I]))。
            targetMap.insert(対<整数、文字列>(インデックス[I]、ターゲット[I]))。
        } 
        ソート(indexes.rbegin()、indexes.rend())。
        ための式(I int型:インデックス){ 
            列src = srcMap.at(i)を、
            // C ++的SUBSTR不会越界访问以下的判断是安全的
            であれば(SRC == S.substr(I、src.size())){ 
                S.replace(I、src.size()、
            }
    } 
}。

  

おすすめ

転載: www.cnblogs.com/lowkeysingsing/p/11291211.html