测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25648. ABB字符串提示信息:ABB 形式的字符串:是由 3 个字符组成,其中后两个字符相同,第一个字符与后两个字符不同。如:"cbb"、"q22"、"688" 都是 ABB 形式的字符串;"abc"、"wwe"、"pop" 都不是 ABB 形式的字符串。子串:是指一个字符串中连续的一段字符序列。如:字符串 "HelloWorld!" 中,"Hello"、"ello"、"World"、"or" 都是该字…

填空题 容易

题目描述

ABB字符串

提示信息:

ABB 形式的字符串:是由 3 个字符组成,其中后两个字符相同,第一个字符与后两个字符不同。

如:"cbb"、"q22"、"688" 都是 ABB 形式的字符串;"abc"、"wwe"、"pop" 都不是 ABB 形式的字符串。

子串:是指一个字符串中连续的一段字符序列。

如:字符串 "HelloWorld!" 中,"Hello"、"ello"、"World"、"or" 都是该字符串的子串。

编程实现

给定一个字符串 S,请统计 S 中有多少个 ABB 形式的子串,以及多少种 ABB 形式的子串。

例如:S = "nnnseebbetoosee",ABB 形式的子串有 see、ebb、too、see,共 4 个;ABB 形式的不同子串有 see、ebb、too,共 3 种。

输入描述

输入一个长度不超过 100 的字符串 S

输出描述

输出两个整数,分别表示 S 中有多少个 ABB 形式的子串,以及多少种 ABB 形式的子串,整数之间以一个空格隔开

样例输入

nnnseebbetoosee

样例输出

4 3

参考答案

s = input().strip() total_count = 0 unique_set = set() for i in range(len(s) - 2): # 检查后两个字符是否相同,且第一个字符不同 if s[i+1] == s[i+2] and s[i] != s[i+1]: substr = s[i:i+3] total_count += 1 unique_set.add(substr) print(f"{total_count} {len(unique_set)}")

答案解析

输入处理:读取字符串并去除首尾空格

初始化计数器:

total_count:统计所有ABB子串数量

unique_set:存储不同子串(自动去重)

遍历检查:

循环范围:0 到 len(s)-3(确保能取到长度为3的子串)

检查条件:s[i+1] == s[i+2] and s[i] != s[i+1]

结果统计:

符合条件的子串加入计数器

子串加入集合(自动去重)

输出结果:ABB子串总数和不同子串种类数

样例验证:

输入:"nnnseebbetoosee"

处理过程:

位置3:"see" → 符合(计数+1,集合添加"see")

位置5:"ebb" → 符合(计数+1,集合添加"ebb")

位置9:"too" → 符合(计数+1,集合添加"too")

位置12:"see" → 符合(计数+1,集合已存在"see"不添加)

输出:4 3(总数4,种类3),符合样例要求

此方案时间复杂度为O(n),空间复杂度O(m)(m为不同子串数量),高效满足题目要求。

上一题 下一题