Подсчет символов, идущих подряд, в строке
Нужно написать код, который будет считать количество одинаковых символов в строке, идущих подряд и выводить букву + количество повторений. Если символ встречается 1 раз, то в выводе не должно быть 1
Я написал код. Он работает, но не во всех случаях. Например:
Ввод: AAABBB
Вывод: A3B3
В такой ситуации мой код работает и всё хорошо.
Однако может быть такая ситуация:
Ввод: AAABBAA
Вывод, который должен быть: A3B2A2
Вывод, который дает мой код: A5B2
Вот мой код:
text = input()
li = []
li1 = []
for i in text:
li.append(i)
for i in li:
j = li.count(i)
if j != 1:
if i not in li1:
li1.append(i)
li1.append(j)
else:
if i not in li1:
li1.append(i)
print(*li1, sep='')
Подскажите, пожалуйста, как исправить. Заранее спасибо.
Ответы (6 шт):
На питоне хз, но на шарпе это так, на питон думаю проблемы перевести не будет.
StringBuilder result = new StringBuilder();
char c = text[1];
int cnt=1;
for (var i=1; i<text.length; ++i)
{
if (c!=text[i])
{
result.append(c.ToString() + cnt.ToString());
c = text[i];
cnt = 0;
}
++cnt;
}
if (cnt>0)
result.append(c.ToString() + cnt.ToString());
text = input() + '`'
sq = []
cnt = 1
ch = text[0]
for c in text[1:]:
if c != ch:
sq.append(ch)
if cnt > 1:
sq.append(cnt)
ch = c
cnt = 1
else:
cnt+=1
print(*sq, sep='')
пользуйтесь встроенными библиотеками:
from itertools import groupby
a = "AAABBBAABABBB"
res = "".join([f"{i}{len(list(g))}" for i,g in groupby(a)])
print(res)
A3B3A2B1A1B3
Если единицы не нужно выводить, то из-за особенностей генератора groupby можно сделать так:
res = "".join([f"{x[0]}{x[1] if x[1]>1 else ''}"
for x in [(i, len(list(g))) for i, g in groupby(a)]])
print(res)
A3B3A2BAB3
вариант с регуляркой:
from re import sub
a = "AAABBBAABABBB"
f = lambda m: f'{m[1]}{l if (l:=len(m[0])) > 1 else ""}'
res = sub(r'(\w)\1*', f, a)
print(res) # 'A3B3A2BAB3'
А можно вот так:
text = input()
result: str = ''
number = 0
letter = ''
for s in text:
if not letter:
letter = s
number += 1
else:
if s != letter:
result += letter + str(number)
letter = s
number = 1
else:
number += 1
result += letter + str(number)
print(result)
s=input()
s=s.replace(' ','')
s2=''
el=s[0]
k=1
for c in s[1:]:
if el==c:
k+=1
else:
s2+=el+str(k)+' '
el=c
k=1
s2+=el+str(k)
print(s2)