美文网首页【python公司校招题】
【python吉比特】字符串距离?

【python吉比特】字符串距离?

作者: 阿牛02 | 来源:发表于2019-08-11 15:31 被阅读0次

题目:给出两个相同长度的由字符 a 和 b 构成的字符串,定义它们的距离为对应位置不同的字符 的数量。如串”aab”与串”aba”的距离为 2;串”ba”与串”aa”的距离为 1;串”baa”和串”baa”的 距离为 0。下面给出两个字符串 S 与 T,其中 S 的长度不小于 T 的长度。我们用|S|代表 S 的 长度,|T|代表 T 的长度,那么在 S 中一共有|S|-|T|+1 个与 T 长度相同的子串,现在你需要计 算 T 串与这些|S|-|T|+1 个子串的距离的和。

输入描述:

第一行包含一个字符串 S。

第二行包含一个字符串 T。

S和T均由字符a和b组成,1≤ |T| ≤ |S| ≤105。

输出描述:

输出对应的答案。

示例1

输入

aab

aba

输出

2

说明

示例2

输入

aaabb

bab

输出

5

说明

在样例 2 中,”aaa”与”bab”的距离为 2,”aab”与”bab”的距离为 1,”abb”与”bab”的距离为 2,

所以最后答案为 5。

code:

###两个循环会超时###扫描思想:例如s=aaabb,t=bab

###1.先看t中的第一个字符b在s中扫过s=[0:3]=aaa 所以有三次不同

###2.再看t中的第二个字符a在s中扫过s=[1:4]=aab 所以有一次不同

###3.再看t中的第三个字符b在s中扫过s=[2:5]=abb 所以有一次不同

###所以总共有五次不同

###建立a[i]代表s中s[:i]中a的个数,那么b的个数就是i-s[:i]

s = 'aaabb'#input()

t = 'bab'#input()

a = [0]

for i in range(len(s)):

    if s[i] == 'a':

        a.append(a[-1] + 1)

    else:

        a.append(a[-1])

res = 0

delta = len(s) - len(t) + 1

for j in range(len(t)):

    if t[j] == 'a':

        res += j + delta - a[j + delta] - (j - a[j])

    else:

        res += a[j + delta] - a[j]

print(res)

相关文章

网友评论

    本文标题:【python吉比特】字符串距离?

    本文链接:https://www.haomeiwen.com/subject/thhsjctx.html