Получение двойного желаемого результата - PullRequest
0 голосов
/ 07 марта 2020

Есть двоичная строка. Мы должны посчитать количество подстрок, начинающихся и заканчивающихся '1'. Я использовал этот подход, но не получил желаемого результата. Скажите, пожалуйста, где происходит сбой кода.

Код -:

st="1001101"
c=0
for i in st:
    if i=='1':
        for j in st[st.index(i)+1:]:
            if j=='1':
                c+=1

print(c)

Ответы [ 2 ]

2 голосов
/ 07 марта 2020

Проблема с st.index(i), потому что, поскольку у вас есть несколько 1, всегда требуется первое

. Вы можете использовать enumerate, чтобы получить и индекс, и букву, для начальной буквы

* 1007. *

Используя понимание списка, вы также можете вычислить пары индексов, которые соответствуют требованию, а затем просто взять длину

pairs = [(i, j) for i in range(len(value)) 
                for j in range(i + 1, len(value)) 
                if value[i] == value[j] == "1"]

# [(0, 3), (0, 4), (0, 6), (3, 4), (3, 6), (4, 6)]
print(len(pairs)) #6
1 голос
/ 07 марта 2020

Это на самом деле математический вопрос ... чтобы узнать ответ, вам нужно только посчитать число 1 (назовите это c1), тогда ответ nCr (n = c1, r = 2)

st="1001101"
c1=0
for i in st:
    if i=='1': c1+=1

c=c1*(c1-1)//2

print(c)

Кстати, рассматриваемый код дает сбой, потому что st.index(i) всегда равен 1. Вы находите первое вхождение i = '1' из st, но st начинается с '1' (или логически первое '1' из строки). Чтобы исправить это:

st="1001101"
c=0
st_len=len(st)
for i in range(0, st_len):
    if st[i]=='1':
        for j in range(i+1, st_len):
            if st[j]=='1':
                c+=1

print(c)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...