いくつかの文字列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()、 } } }。