T2最长的AB序列(20分) - 京东前端笔试编程题&题解

alt

考试平台: 牛客网

题目类型: 选择题(40分) + 3道编程题(60分)

考试时间: 2024-03-23 (两小时)

题目描述

给出一个仅由字符AB构成的字符串Str

请你求出S中包含A和B个数相同的连续区间的最长长度。

输入描述

输入的第一行给出字符串S。
1 ≤ S . l e n ( ) ≤ 2 ∗ 1 0 5 1 \le S.len() \le 2 * 10^5 1S.len()2105

输出描述

输出S中包含A和B个数相同的连续区间的最长长度。

示例1

输入:
AAAAAA

输出:
0

示例2

输入:
AAABBBBAAABBB

输出:
12

题解

这道题目属于字符串和前缀和类型的算法题。需要统计字符串中包含A和B个数相同的连续区间的最长长度。

解题思路:

  1. 首先读取输入的字符串S。
  2. 将字符串S中的字符’A’视为1,字符’B’视为-1,并计算前缀和数组pre_sum,表示从字符串开始到当前位置的A和B的数量差值。
  3. 遍历前缀和数组pre_sum,使用哈希表min_pos记录每个差值首次出现的位置,同时更新最长长度max_length,即当前位置与首次出现位置之间的距离。

s = input()
n = len(s)

# 当字符串为 A 看做 1, 否则看成 -1 , 然后对数字进行求前缀和
pre_sum = [0] * (n + 1)
for i in range(n):
    pre_sum[i + 1] = pre_sum[i] + 1 if s[i] == 'A' else pre_sum[i] - 1


# 中包含 A和B个数相同的连续区间的最长长度
max_length = 0
for right in range(n, -1, -1):
    for left in range(right):
        if pre_sum[right] - pre_sum[left] == 0:
            max_length = max(max_length, right - left)
            break

print(max_length)

以上写法只能 AC 80% 的测试用例, 以下是优化后的代码

from itertools import accumulate
s = input()

# 当字符串为 A 看做 1, 否则看成 -1 , 然后对数字进行求前缀和
pre_sum = list(accumulate(s, lambda x, y: x +  (1 if y == 'A' else -1), initial=0))


# 中包含 A和B个数相同的连续区间的最长长度
# min_pos[s] 表示 最早的 s 在 pre_sum 中的位置
max_length, min_pos = 0, {}
for right, s in enumerate(pre_sum):
    if s in min_pos:
        max_length = max(max_length, right - min_pos[s])
    else:
        min_pos[s] = right

print(max_length)

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

相关推荐

  1. 力扣题库第3连续序列

    2024-03-29 14:22:03       18 阅读
  2. 笔试」:数组中连续子序列

    2024-03-29 14:22:03       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 14:22:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 14:22:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 14:22:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 14:22:03       18 阅读

热门阅读

  1. day72Html

    day72Html

    2024-03-29 14:22:03      24 阅读
  2. 微信小程序监听用户经纬度变化

    2024-03-29 14:22:03       17 阅读
  3. 2024.3.25 ARM

    2024-03-29 14:22:03       17 阅读
  4. ArcGis Pro Python工具箱教程 03 工具箱中工具自定义

    2024-03-29 14:22:03       17 阅读
  5. silk-v3-decoder将sil转为mp3

    2024-03-29 14:22:03       29 阅读
  6. 篇二.软件需求管理办法

    2024-03-29 14:22:03       16 阅读
  7. 需求工程、需求分析的具体方式以及实践

    2024-03-29 14:22:03       16 阅读