如果我使用它,请忽略一个字母的索引

时间:2017-12-10 15:26:36

标签: java arrays indexof

我正在研究关键的柱状转置密码,

html

关键字是:

  

分析师

sorted_key是:

  

{a,a,l,n,s,t,y}

当我尝试打印变量位置时:

  

0 0 3 1 5 6 4

但我应该得到这个:

  

0 2 3 1 5 6 4

如果密钥中有重复的字母,则会出现问题。在这个例子中,'a',即使第二次或第三次出现,它总是会看到它的第一个索引。怎么能修好?

1 个答案:

答案 0 :(得分:0)

您可以维护一个Map,其中包含每个字符的最后一个索引:

Map<Character,Integer> indices = new HashMap<>();
for(int i = 0; i < column; i++) {
    // get the previous position of sorted_key[i] (or -1 is there is no previous position)
    int last = indices.computeIfAbsent(sorted_key[i],c->-1);
    // search for the next position of sorted_key[i]
    position = keyWord.indexOf(sorted_key[i],last+1);
    // store the next position in the map
    indices.put(sorted_key[i],position);
    for(int j = 0; j < row; j++) {
        matrix[j][position] = cipher_array[count];
        count++;
    }
}