题目:
两字符串X与Y,如果存在a-z的某个排列组合,把X的第一个字符全换成a,第二个字符全换成b,就能把X变成Y,就表明两字符串相似。
例如 xax与 aba,把z替换成a,a换成b就一样了,表明相似。
求一个目标字符串X,用来匹配的字符串Y,求X的子串里有多少和Y相似的,输出相似字符串的个数。
输入是X和Y,输出个数
输入:
ababcdcbbab
xyx
输出:
4
思路:
一个长度为Y字符串大小的滑动窗口从X开始一直滑到结尾,得到所有长度与Y相等的子串,形成一个list,一定要用List,而且千万不要去重!!!!去重就会少字符串,我就是因此没通过T_T
对每个子串,进行一次相似判断。给子串建立一个字典,记录所有不重复字符作为字典的键,键的值是字符在子串里出现的位置。比如xyy,字典{x:[0],y:[1,2]},接着用一个list把字典的值加在一起{[0],[1,2]}
如果两个子串的位置list相同,就判断两字符串相似。
def dicfuc(sb):
bdic={}
for i in range(len(sb)):
if(sb[i] not in bdic):
bdic[sb[i]]=[i]
else:
bdic[sb[i]].extend([i])
return bdic
def xiangsi(sa,sb):
bdic=dicfuc(sb)
lb=[]
la=[]
adic =dicfuc(sa)
for k in bdic:
lb.append(bdic[k])
for k in adic:
la.append(adic[k])
alen=len(adic)
blen = len(bdic)
if(alen!=blen):
return False
else:
if(sorted(la)==sorted(lb)):
return True
else:
return False
s=input()
T=input()
# s='ababcdcbbab'
# T='xyx'
ww =[]
lenT=len(T)
lenS=len(s)
for i in range(lenS-lenT+1):
ww.append(s[i:i+lenT])
print(ww)
count=0
for sitem in ww:
if(xiangsi(sitem, T)):
count=count+1
print(count)