我正在研究关键的柱状转置密码,
html
关键字是:
分析师
{a,a,l,n,s,t,y}
当我尝试打印变量位置时:
0 0 3 1 5 6 4
但我应该得到这个:
0 2 3 1 5 6 4
如果密钥中有重复的字母,则会出现问题。在这个例子中,'a',即使第二次或第三次出现,它总是会看到它的第一个索引。怎么能修好?
答案 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++;
}
}