-2

こんにちは、私はゲノム配列を読み取って、表示される 10 文字の繰り返しを検索しようとしています。私が考えている解決策は、次の 3 つのステップに分けられます。

  1. ゲノム配列を読む例: GAAAAATTTTCCCCCCACCCTTTTCCCC
  2. 文字列を連続する 10 個のシーケンスにカットします。たとえば、最初に新しく生成された文字列はインデックス 0 ~ 9 になり、次は 1 ~ 10、2 ~ 11、3 ~ 12... になります。
  3. これらのシーケンスを ArrayList に格納します
  4. 文字列を比較する
  5. 繰り返されるシーケンスとそれらが繰り返される頻度を返します。

私が抱えている問題は、古くて大きな文字列から新しい文字列を生成する方法です。たとえば、私のゲノム シーケンスが AAAAGGGGGAAAATTTCCCC の場合、最初の 10 文字のシーケンスは AAAAGGGGGA になり、次は AAAGGGGGAA になります。Javaでそれを行うにはどうすればよいですか?

これは私がこれまでに持っているものです:

import java.util.List;
import java.util.ArrayList;

public class Solution
{
    public ArrayList<String> findRepeatedDnaSequences(String s) 
    {
        ArrayList<String> sequence = new ArrayList<String>();
        int matches;
        ArrayList<String> matchedSequence = new ArrayList<String>();
        for(int i = 0; i < s.length(); i++)
        {
            if (i + 9 > s.length())
            {
                sequence.add(s.substring(i, i + 9));
            }

        }
        for(int i = 0; i < sequence.size(); i++)
        {
            matches = 0;
            for (int j = 1; j < sequence.size(); j++)
            {
                if(sequence.get(i) == sequence.get(i))
                {
                    matches++;
                    System.out.print(matches);
                    matchedSequence.add(sequence.get(i));
                }
            }
        }
        return matchedSequence;
    }
}
4

3 に答える 3

0

Java 8 を使用している場合は、ストリームを使用して実行できます。残念ながら、Stream API には他のプログラミング言語に存在する多くのメソッドが欠けていますが、それでも自分で実装することができます。slidingしたがって、この回答の方法を使用して:

文字列のストリームを文字列ペアのストリームに変換するにはどうすればよいですか?

次のようなことができます。

String gseq = "AAAAACCCCCAAAAACCCCC";

Map<String, Long> count = StreamUtils.sliding(10, gseq.chars().boxed())
        .map(l -> new String(l.stream().mapToInt(n -> n).toArray(), 0, l.size()))
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

これにより、長さ 10 の各部分文字列のカウントを含むマップが生成されます。

于 2016-02-15T23:20:12.823 に答える
0
public class MainClass {

    public static void main(String[] args){
        printAllSequences("GAAAAATTTTCCCCCACCCTTTTCCCC", 10);
    }

    public static void printAllSequences(String DNASequence, int subSequenceSize){
        for(int i=0; i<DNASequence.length() - subSequenceSize - 1; i++){
            System.out.println(DNASequence.substring(i, i + subSequenceSize));
        }
    }

}
于 2016-02-15T22:55:31.710 に答える