题目:

第一行一个字符串A。

第二行一个字符串B。两个字符串保证均只含小写字母。(1<=|A|<=500000,1<=|A|<=100)

第三行一个正整数Q,表示训练次数。(1<=|Q|<=100000)

接下来m行每行两个整数l和r,表示一段区间。(1<= l<=r<=A)

输出:

共Q行,每行一个非负整数,表示出现的次数。

样例输入:

comeonmandontconconnect

on

5

1 5

1 6

1 23

11 16

11 23

样例输出:

0

1

4

2

3

思路:

首先,最容易想到的是锁定A中在(l,r)的区间范围,判断这个区间中B出现的次数。但是时间复杂度太高,而且会有重复运算。所以,我们可以将A整体遍历一遍,A中B出现的索引范围都保存在一个list中。最后,只需判断输入的区间值(l,r)是否包含list保存的区间值,若包含,则计数加一。

代码:

import sys
A = sys.stdin.readline().strip()
B = sys.stdin.readline().strip()
M = int(sys.stdin.readline().strip())

temp = list()
result = list()
for i in range(len(A)):
    if A[i:i+len(B)] == B:
        temp.append([i,i+len(B)])

for i in range(M):
    line = sys.stdin.readline().strip().split()
    nums = list(map(int,line))
    res = 0
    for j in temp:
        if nums[0]-1<=j[0] and nums[1]>=j[1]:
            res+=1
    result.append(res)

for item in result:
    print(item)

测试:

【百度笔试】编程题2 字符串计数

相关文章:

  • 2021-09-27
  • 2022-12-23
  • 2022-12-23
  • 2021-12-14
  • 2022-01-18
  • 2022-12-23
  • 2021-12-16
猜你喜欢
  • 2021-05-25
  • 2021-10-30
  • 2022-12-23
  • 2022-01-03
  • 2022-02-19
  • 2021-08-16
  • 2022-02-12
相关资源
相似解决方案