0

私は文字の2つの配列を持っています。それらは次のようになります。

1)    S ( J D )

2)    S J Z D

2 番目の配列は常に最初の配列とは異なります。括弧はなく、+/- 1 文字の英字を使用するか、2 文字の位置を入れ替えるだけです。基本的に、2 番目の配列の文字が含まれるように、2 つの配列を一緒にマージする必要がありますが、最初の配列の括弧は維持します。(以下のテストケースを見ると理解しやすい)

上記の例では、出力は次のようになります。

S (J Z D)

私はこれを行う方法がよくわかりません。私がこれまでいじっていたこと:

各配列のアルファ文字を数えて、加算、減算、または交換しているかどうかを確認できます。

加算の場合、配列 #1 のコピーを作成できますが、括弧は使用しません (つまり、配列 #3)。この配列を配列 #2 と比較し、最初の違いを見つけます。インデックスに注意してください。次に、そのインデックスに到達するまで #1 を繰り返します (括弧ごとに 1 を引きます)。次に、#2 の文字を配列にコピーします。

減算の場合は、加算と同じことを行います。違いが見つかった場合にのみ、リスト #1 から削除します。

これを処理するためのより良い方法を考えられる人はいますか?

テストケース:

Input

Array1: A (G F)
Array2: A G D F

Output

A (G D F) 


Input

Array1: A (G F)
Array2: A G F D

Output

A (G F) D 

Input

Array1: A (G F)
Array2: A D G F

Output

A D (G F) 


Input

Array1: A (G F)
Array2: A F

Output

Input

Array1: A (G F)
Array2: G F

Output

(G F) 

Input

Array1: A (G F)
Array2: A F G

Output

A (F G) 
4

3 に答える 3

1
function myFunction()
{
var a = ["S","(","J","D",")"];
var b = ["S","P"];
var c = new Array();

var i = 0;
var j = 0;
var k = 0;

while (i < a.length) {
    if (a[i] == '(' || a[i] == ')')
        c[k++] = a[i++];

    if (i < a.length && j < b.length) {
        // If character in a and b matches the add to the final result
        if (a[i] == b[j]) {
            c[k++] = a[i++];
            j++;
        } else {
                // If the character in a and b don't match then check if character in a exist in b. 
                // If yes then add the character in b else skip
                if (b.indexOf(a[i]) != -1)
                    c[k++] = b[j++];
                else
                    i++;
            }
        }
    }

    while (j < b.length)
        c[k++] = b[j++];

alert(c);
}
于 2013-08-07T17:56:13.110 に答える
0

これを処理するためのより良い方法を考えられる人はいますか?

配列#2(結果に必要なすべての文字を含む)をコピーしてから、配列#1の括弧をコピーに挿入する方が簡単だと思います。

var array1 = "S(JZD)".split(''),
    array2 = "SZD".split('');

var result = array2.slice();
for (var i=array1.length; i--; ) // iterate backwards to prevent index troubles
    if (/[()]/.test(array1[i]))
        result.splice(i, 0, array1[i]);
console.log(result);
于 2013-08-07T17:40:47.633 に答える