|
发表于 2022-1-28 14:12:15
|
显示全部楼层
x [l,o,v,e]
y [2,2,3,3]
伪代码:
for each in x的执行内容
第一轮
each = l
#l的数量是1,不进入if
if(l的数量 > 1 且 标记位 == 0){
}
第二轮第三轮第四轮同上,什么也不做
for each in y的执行内容
第一轮
each = 2
#2在y中的数量 > 1,进入循环
if(2在y中的数量 > 1 且 标记位 == 0)
#i记录 2在y 中第一次出现的位置,即0
i = 0
#last表示x在i位置的元素即l
last = l
#i是位置,位置为-1表示非法
while i != -1
第一次循环 l == x[0],不进入if
#i记录2在y中下一次出现的位置即i=1,没有再次出现,则i=-1
i = x.find(each, i + 1)
第二轮循环 l != x[1],进入if
print("由于替换字符出现冲突,该密文无法解密!")
标记为 -1
break
======================================================
解释:
为了方便说明,我们把一对(x,y)称作一个加密对
大概意思就是
x [l,o,v,e]
y [2,2,3,3]
时,在执行 for each in y 时,
先形成 (‘l’,2) 的加密组合,并用last记录 x 即加密对左边的'1'
然后找了一下y中 第二次出现2的位置,对应取出x中该位置的o进行比较,发现o并不等于last记录的x值,这样就说明,这个位置的加密对('o',2)就和之前我们生成的('l',2)冲突了 |
|