如何在指定字符串中查找含指定数量特定字符的子串?
字符串
GGACATCGCGGTGGATCGAC的目标子串查找方案 一、查找含恰好3个G的连续子串
方法思路
遍历字符串所有可能的连续子串,统计每个子串中G的出现次数,筛选出次数为3的子串。
代码实现
s = "GGACATCGCGGTGGATCGAC" matches = [] # 遍历所有起始位置 for start in range(len(s)): # 遍历所有结束位置(确保子串从start到end连续) for end in range(start, len(s)): sub = s[start:end+1] if sub.count('G') == 3: matches.append(sub) # 去重并按长度、字典序排序 unique_matches = sorted(list(set(matches)), key=lambda x: (len(x), x)) print("符合条件的子串(去重后):") for item in unique_matches: print(item)
补充说明
- 双重循环覆盖所有连续子串的可能组合
- 使用
count()方法快速统计字符出现次数 - 去重是为了避免重复的子串(比如不同起始/结束位置生成相同子串),如果需要保留所有出现位置的子串,去掉
set转换即可
二、查找含恰好2个G和1个C的连续子串
方法思路
同样遍历所有连续子串,同时统计G和C的数量,筛选出G=2且C=1的子串。
代码实现
s = "GGACATCGCGGTGGATCGAC" matches = [] for start in range(len(s)): for end in range(start, len(s)): sub = s[start:end+1] g_num = sub.count('G') c_num = sub.count('C') if g_num == 2 and c_num == 1: matches.append(sub) # 去重并排序 unique_matches = sorted(list(set(matches)), key=lambda x: (len(x), x)) print("符合条件的子串(去重后):") for item in unique_matches: print(item)
补充说明
- 若需求允许
C的数量大于1,可将条件改为g_num == 2 and c_num >= 1 - 若不需要去重,直接输出
matches即可
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

