2017-09-30 7 views
0

私は自動暗号を解くことを試みており、鍵の長さを見つけるために、私は暗号文のすべての要素の間の「距離」を見つける必要があります。 配列のすべての要素の間の距離を見つけましたが、今は各ジャンプの頻度を見つける方法が必要です。私は、文字列「ababbababba」を持っていたので作業したい場合 だから例えば、1のジャンプの頻度が2であり、2のジャンプの頻度は、ここからだから、基本的に2配列内の要素間の '距離'を求める

for(int i = 1; i<cipher2.length(); i++){ 
      if(cipher2Array[i] == 'f') { 
       arrayList.add(i); 
       int jumpDistance = arrayList.get(i) - arrayList.get(i-1); 
      } 
     } 

あり、私jumpDistance変数で、どのように私は

if(jumpDistance == theSameinAnyOtherPlaceOfArray) { 
counter++; 
} 

と出力jumpSizeとテーブルのタイプのようなものだろう、周波数

+0

最後のルックアップ値を維持する 'Map <文字、マップ<整数、整数>'と 'int []'が役立ちます。 – SMA

答えて

1

あなたはHashMap<Integer, Integer>が必要になります。キーとしてjumpSizeを保存し、対応するfrequencyを値として保存することができます。

また、複数の文字を一度にエバリュエートしたい場合は、ネストされたマップが必要です。つまり、各キャラクタのマップは@ SAMで示唆されているようにMap<Character, Map<Integer, Integer>>です。

 Map<Integer, Integer> counter = new HashMap<Integer, Integer>(); 
     for(int i = 1; i<cipher2.length(); i++){ 
      if(cipher2Array[i] == 'f') { 
       arrayList.add(i); 
       int jumpDistance = arrayList.get(i) - arrayList.get(i-1); 
       Integer freq = counter.get(jumpdistance); 
       freq = freq == null ? 1 : freq+1; 
       counter.put(jumpDistance, freq); 
      } 
     } 
関連する問題