Определить есть ли три подряд стоящих одинаковых символа в строке

520 просмотра
0
0 Комментариев

Вводится строка, если в ней есть 3 подряд стоящих одинаковых символа, то надо вывести NO, если нет — YES


Добавить комментарий

2 Answers

Python Опубликовано 14.12.2018
0

Регулярные выражения спешат на помощь!

import re
 
str1 = 'qwerty'
str2 = 'qwerttty'
 
regex = re.compile(r'^.*(.)(\1)(\1).*$')
 
print 'YES' if regex.match(str1) else 'NO'
print 'YES' if regex.match(str2) else 'NO'

А ваша программа не работает потому что в срезе, который вы берёте на каждой итерации всего 2 элемента.

>>> s = [1, 2, 3, 4, 5]
>>> i = 2
>>> j = 0
>>> s[j:i]
[1, 2]

Ну, или как-то так:

same3 = lambda s: min([len(x) for x in [set(x) for x in [s[x:x+3] for x in range(len(s) - 2)]]]) == 1
 
same3('qwerty')    // False
same3('qwerttty')  // True

Да! Я сделал это! Я написал программу, менее читабельную, чем регулярка, которой она эквивалентна!

А если серьёзно, эта программа делает следующее:

s = 'qwerty'
 
triplets = [s[x:x+3] for x in range(len(s) - 2)]
// находим все тройки подряд идущих символов
// для `qwerty` получим ['qwe', 'wer', 'ert', 'rty']
 
sets = [set(x) for x in triplets]
// каждую тройку преобразуем в множество (set)
// особенность множества - в нём нет повторяющихся элементов
 
lengths = [len(x) for x in sets]
// вычисляем размер каждого множества
// если размер какого-либо множества равен 1, то все элементы, входящие в него, равны
 
minlen = min(lengths)
// находим множество минимальной длины
 
print minlen == 1

Ну, и объявление функции same3 = lambda s: ... эквивалентно классическому:

def same3(s):
    ...

Добавить комментарий
0

Вводится строка, если в ней есть 3
подряд стоящих одинаковых символа, то
надо вывести NO, если нет — YES

import re
 
print("NO" if re.search(r"(.)" + r"\1" * (3 - 1), s) else "YES")

Или без регулярных выражений:

from itertools import groupby
 
print("NO" if any(len(list(dups)) > (3 - 1) for _, dups in groupby(s)) else "YES")

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up