如何修改字符串各子串的字符,以消除处理后字符串中的FFF与BBB序列
问题解决方案
你的原有思路存在以下几个缺陷,才会导致无法处理全部场景:
- 固定拆分不重叠的3长度子串会忽略子串边界的连续字符,容易出现跨子串的「FFF」或「BBB」序列,无法被检测和处理
- 子串修改后可能和相邻子串的首尾字符形成新的三连序列,拆分遍历的方式无法覆盖这类新增的异常序列
count('FF') >=2的判断逻辑仅能识别出3位全为F的子串,但是全量替换FF为BF的逻辑可能会引入不必要的修改,且没有对应处理BB的逻辑
推荐实现思路
采用单遍遍历修改的方案,保证全程不会出现三个连续的相同字符,且修改量最小:
- 将字符串转为可变列表,降低修改开销
- 从第3位(索引2)开始遍历每一个字符,检查当前字符和前两位是否完全相同
- 如果出现三个连续的F或B,直接将当前字符替换为另一个字符即可打断三连
- 遍历完成后将列表转回字符串就是最终结果
示例代码
origin_str = 'FFFBBFFBBFFBBFFBFFBFF' str_list = list(origin_str) for i in range(2, len(str_list)): # 检测是否出现三连相同字符 if str_list[i] == str_list[i-1] == str_list[i-2]: # 替换当前字符为另一个字符打断三连 str_list[i] = 'B' if str_list[i] == 'F' else 'F' result = ''.join(str_list) print(result)
内容的提问来源于stack exchange,提问作者Abdul Basit Niazi
相关产品推荐
相关产品推荐

