Найти две строки внутри родительской
Есть задачка, в ней нужно в первой строке выделить две последующие, к примеру в строке "player" выделить другие две "lar" и "pye", так чтобы получилось "pLAyeR" и "удалив" прописные или строчные элементы строки получилась одна из двух строк (удаление не нужно я так думаю). И посчитать пары строчная-Прописная/Прописная-строчная. Это сделать получилось, код примерно вот такой:
s, sub1, sub2 = str(input()), str(input()), str(input())
for i in s:
for j in sub1:
if j == i:
s = s.replace(i, j.upper(), 1)
print(s)
# счётчик сколько пар переходящих из прописной в строчную и наоборот
counter = 0
for i in range(len(s)):
if i + 1 >= len(s):
break
if (s[i].islower() and s[i+1].isupper()) or (s[i].isupper() and s[i+1].islower()):
counter += 1
else:
continue
print(counter)
Теперь же проблема в том, что нужно подобные действия совершить со строками которые в принципе не слова, а набор символов, как в "ababbaba" надо найти "abbb" и "abaa", чтобы было "abABBaBa".
Пытался сделать через срезы строки, но получается большое ветвление, а хочется решение более оптимальное.
Прошу помощи!
Ответы (1 шт):
Есть такой клаcc Counter - как раз для таких случаев
from collections import Counter
s = 'ababbaba'
s1 = Counter(s)
s2 = Counter('abbb')
s3 = Counter('abaa')
if s1 - (s2 + s3): # останется не пустой словарь
print('останутся лишние символы')
r = ''
for c in s:
if c in s2: # если символ из первой подстроки
s2 -= Counter(c) # убираем символ из Counter'а
r += c # добавляем символ в результат
elif c in s3: # если из второй - повышаем регистр
s3 -= Counter(c)
r += c.upper()
else:
pass # лишние символы, я их просто пропускаю
print(r)
count = 0
for c1, c2 in zip(r[:-1], r[1:]): # будем сравнивать предыдущий символ со следующим
if c1.islower() ^ c2.islower(): # если было изменение регистра
count += 1
print(count)