题意
给定字符串p和一个pos数组,输出一个只使用前k个字母的n长度字符串,要求在pos[i]==1的位置匹配p,在pos[i]==0的位置不匹配。
题解
先准备一个空的ans数组,然后在pos[i]==1的位置填入p,期间判断合法性。
然后再判断一下pos[i]==0的位置是否非法。
最后往空的位置填字符,如果p由单种字母组成即p的周期为1,这种比较简单直接填不是p[0]的字母就行。如果p由至少两种字母组成,那么就填p[0],现证明:
假如i为某空位置,那么pos[i]必为0。如果填入p[0]可能造成其不合法,那么必然后面某j位置有pos[j]==1。假设从i位置往后x个位置为第一个不为p[0],从j位置往后y个位置第一个不为p[0],那么必有x>y(i和j中间pos为0的位置都填入了p[0]),因此必有ans[i:i+len(p)-1]≠p,。