Что не так с кодом на Python 3?

Есть задача на Python 3 с условием: Дана цепочка, состоящая из синих (B) и красных (R) точек. Нужно удалить наименьшее одинаковое количество синих и красных точек так, чтобы сначала шли только синие, а потом – только красные.

Входные данные

Входная строка содержит только символы 'B' и 'R' без пробелов.

Выходные данные

Нужно вывести полученную цепочку, в которой сначала идут только синие точки, а потом – только красные. Во второй строке нужно вывести количество удалённых (синих и красных) точек. и примерами: Примеры Ввод BBBRBBRBRBRRRRRR Вывод BBBBBRRRRRRR 4 Пытаюсь пол часа решить, использую разные варианты, но всё равно не получается. Вот последний вариант кода:

n = input()
s = ''
count = 0
for g in range(0, len(n)):
    if g == len(n) - 1:
       break
    if n[g] == 'B' and n[g + 1] == 'B':
       s += 'B'
       continue
    elif n[g] == 'B' and n[g + 1] == 'R':
        if count == 0:
            s += 'B'
        else:
            s += 'R'
        continue
    elif n[g] == 'R' and n[g + 1] == 'B':
        s += 'R'
        count += 1
        continue
    elif n[g] == 'R' and n[g + 1] == 'R':
        continue
print(s)
print(count)

Что я делаю не так? В чём и где ошибки? Подскажите, пожалуйста, как правильно решить задачу и что использовать?!


Ответы (2 шт):

Автор решения: Danil Pylypenko

Это конечно не лучший вариант, но все же рабочий

def ed(a):
if a:
    b = a.split('R')
    r = a.split('B')
    sorted_b = [y for y in b if y]
    sorted_a = [y for y in r if y]
    sorted_b.sort()
    sorted_a.sort()
    count_b = sorted_b.count(sorted_b[0])
    count_a = sorted_a.count(sorted_a[0])
    cb = min(map(len, sorted_b))
    bb = ''.join(list(filter(lambda x: len(x) > cb, sorted_b)))
    cr = min(map(len, sorted_a))
    rr = ''.join(list(filter(lambda x: len(x) > cr, sorted_a)))
    res = bb.count('B') * "B" + rr.count("R") * "R"
    return f'{res} {count_a + count_b}'

print(ed("BBBRBBRBRBRRRRRR"))

Вывод будет:

BBBBBRRRRRR 5
→ Ссылка
Автор решения: Leonfirebutton

данное решение подойдет сугубо для данного ввода строки, выглядит так:

s = "BBBRBBRBRBRRRRRR"
bb = s[:s.find('RR')]
rr = s[s.find('RR'):]
bb = bb.replace('R', '')
print(bb + rr, s.count('BR'))

1-делим на две части строку, до момента, где начинаются RR,

2-потом в первой заменяем R на пуcтое значение, т.е. удаляем.

3-в выводе "склеиваем" назад в строку, подсчитываем буквосочетание BR

→ Ссылка