1

私は文字列の配列を持っています:

qTrees[0] = "023012311312201123123130110332";
qTrees[1] = "023012311130023103123130110332";
qTrees[2] = "023013200020123103123130110333";
qTrees[3] = "023013200202301123123130110333";

このサイクルを使用して、それらから同様の部分を取得しようとしています:

String similarPart = "";
    for (int i = 0; i < qTrees[0].length(); i++){
        if (qTrees[0].charAt(i) == qTrees[1].charAt(i) &&
                qTrees[1].charAt(i) == qTrees[2].charAt(i) &&
                qTrees[2].charAt(i) == qTrees[3].charAt(i) ){

            similarPart += qTrees[0].charAt(i);
        } else {
            break;
        }
    }

しかし、これは間違っています。ご覧のとおり、「02301」しか返されませんが、より深い類似性が可能です。

それを行うためのより良い方法を提案してください。ありがとう。

4

2 に答える 2

0

何を達成しようとしているのかをより明確にする必要があります。あなたは__したいですか:

  • 配列内の任意の 2 つのエントリ間の最長の共通開始シーケンスを見つけます。
  • 配列内のすべてのエントリで最も長い共通開始シーケンスを見つけます。
  • 任意の 2 つのエントリ間で最も長い共通シーケンス (つまり、同じ文字が同じ位置にある) を見つけます。
  • 配列内のすべてのエントリで最長の共通シーケンスを見つけます。

これらはすべて、わずかに異なるアプローチを提供しますが、ループ内でbreakandを正しく使用することになります。continue

于 2013-03-15T07:57:18.187 に答える
0

コードの else 部分を削除します。次に、文字列の最後までチェックします。

コード :

    for (int i = 0; i < qTrees[0].length(); i++){
        if (qTrees[0].charAt(i) == qTrees[1].charAt(i) &&
                qTrees[1].charAt(i) == qTrees[2].charAt(i) &&
                qTrees[2].charAt(i) == qTrees[3].charAt(i) ){

            similarPart += qTrees[0].charAt(i);
        }
    }
于 2013-03-15T08:06:31.627 に答える