Рекурсивно удалить все смежные дубликаты. Я получаю один и тот же вывод для разных входов - PullRequest
1 голос
/ 21 марта 2020

код

def dup(n, s):
    s1 = ""
    list = []
    k = 0

    for i in range(0, n-1):
        if k > 0:
            if s[i] == s[i+1]:
                k = 2
            k = k-1
            continue

        if (s[i] == s[i+1]):
            k = 1
            continue

        else:
            list.append(s[i])

    if s[n-2] != s[n-1]:       
        list.append(s[n-1])

    s1 = "".join(list)

    n1 = len(s1)

    for i in range(0, n1-1):
        if s1[i] == s1[i+1]:
            dup(n1, s1)

        else:
            print(s1)        
num = int(input())
for j in range(0, num):
    s = input()
    n = len(s)
    dup(n, s)

Я получаю одинаковый вывод для разных входов.

Ввод:

quhxgrhqqaccxeprunllfieilbothbbmpsg

Его правильный вывод:

quhxgrhaxeprunfieilbothmpsg

А вывод вашего кода: gksforgk **

1 Ответ

1 голос
/ 21 марта 2020

Я не уверен, что вы делаете в своем коде, но если вы хотите сделать это с помощью Python, вот что вы можете сделать в одной строке:

from itertools import groupby

s = 'quhxgrhqqaccxeprunllfieilbothbbmpsg'

result = ''.join([k for k, g in groupby(s) if len(list(g)) == 1])
# quhxgrhaxeprunfieilbothmpsg

Это в основном группирует все смежные элементы и мы советуем не брать их, если у нас есть более одного и того же соседних элементов.

...