Если задана строка S, рекурсивно удаляйте из нее последовательные дубликаты, используя python - PullRequest
0 голосов
/ 05 апреля 2020

Я добавляю строку [1], из-за которой остается один повторяющийся элемент, но если этого не сделать, строка не печатается. любые решения

def removeCD(str):
    l  = len(str)
    if l == 0 or l == 1:
        return str
    if(str[0]==str[1]):
        return str[1] + removeCD(str[2:])
    else:
        return  str[0] + removeCD(str[1:])

string = input().strip()
print(removeCD(string))

Ответы [ 3 ]

1 голос
/ 05 апреля 2020

Когда символы равны, вы снова добавляете повторяющийся символ. Это должно работать:

def removeCD(str):
    l  = len(str)
    if l == 0 or l == 1:
        return str
    if(str[0]==str[1]):
        return removeCD(str[1:])
    else:
        return  str[0] + removeCD(str[1:])

string = input().strip()
print(removeCD(string))
0 голосов
/ 05 апреля 2020

Вот анализ случая, который нам нужно выполнить -

  1. Если длина строки меньше двух (базовый случай), сравнивать нечего, просто верните строку
  2. В противном случае (по индукции) строка имеет длину не менее двух символов. Если первое соответствует второму, отбросьте первую букву и верните рекурсивный результат
  3. В противном случае (по индукции) длина строки не менее двух символов, а первые два символа не совпадают . Возвращает первый символ в сочетании с рекурсивным результатом.

Это просто кодирует в python программу -

def remove_adjacent_dupes (s = ""):
  if len(s) < 2:
    return s
  elif s[0] == s[1]:
    return remove_adjacent_dupes(s[1:])
  else:
    return s[0] + remove_adjacent_dupes(s[1:])

print(remove_adjacent_dupes("bookkeeper"))
# bokeper
0 голосов
/ 05 апреля 2020

Когда символы равны, вы должны повторяться на всем, кроме первого символа:

if(str[0]==str[1]):
    return removeCD(str[1:])
...