本题要求:给定整数数组 a 与若干字符串 s,判断 s 能否与 a 建立一一对应(双射) 的位置映射:相同数字对应相同字符,且相同字符对应相同数字,并且长度相等。
核心做法:把序列按首次出现顺序压缩成模式串。
a:从左到右,第一次见到某个值就分配一个新的编号 0,1,2,...,形成模式序列 patA。s:同样按字符的首次出现分配编号,得到 patS。|s| != n 直接否;否则比较 patS 与 patA 是否完全相同,相同则存在双射,对应输出 YES,否则 NO。该方法天然保证了“双向一致”:
小Q在路上捡到了一张字条,上面写了一个数组 a 。小Q猜测这些数字可能是某种凯撒密码,于是他找来了一堆字符串,请你判断他找来的字符串能否匹配字条上的数字模板?
当字符串 s 同时满足以下所有条件时,视为匹配模板:
字符串 s 的长度等于数组 a 的元素数量。
数组 a 中相同的数字对应字符串 s 中相同的字符。即,若 ai=aj ,则 si=sj(1<=i,j<=n)