2015-09-16 10 views
-1

Я новичок в python, и я хочу написать программу, которая определяет, состоит ли строка из повторяющихся символов. Список строк, которые я хочу, чтобы проверить, являются:Как определить повторяющиеся символы в строке с помощью Python?

  • Str1 = "АААА"
  • Str2 = "AGAGAG"
  • Str3 = "AAA"

псевдо-код, который я приходят с:

WHEN len(str) % 2 with zero remainder: 
- Divide the string into two sub-strings. 
- Then, compare the two sub-strings and check if they have the same characters, or not. 
- if the two sub-strings are not the same, divide the string into three sub-strings and compare them to check if repetition occurs. 

Я не уверен, что это применимый способ решения проблемы. Любые идеи, как подойти к этой проблеме?

Спасибо!

+0

Почему не просто перебирать струны и сравнить следующий символ с текущим? – metatoaster

+0

Некоторые опции [здесь] (http://stackoverflow.com/q/26703839/198633) – inspectorG4dget

+0

@metatoaster Я не уверен, что это будет работать для всех строк, которые я перечислял. Особенно для Str2 = «AGAGAG», потому что шаблон здесь немного сложный. – MEhsan

ответ

1

Вы можете использовать библиотеку Counter для подсчета наиболее часто встречающихся символов.

>>> from collections import Counter 
>>> s = 'abcaaada' 
>>> c = Counter(s) 
>>> c.most_common() 
[('a', 5), ('c', 1), ('b', 1), ('d', 1)] 

Чтобы получить один наиболее повторяющиеся (общий) характер:

>>> c.most_common(1) 
[('a', 5)] 
0

Чтобы найти шаблон в Python, вы будете должны использовать «регулярные выражения». Регулярное выражение обычно записывается как:

 match = re.search(pat, str) 

За этим обычно следует инструкция if, чтобы определить, удалось ли выполнить поиск.

, например, это то, как вы найдете шаблон «AAAA» в строке:

import re 

    string = ' blah blahAAAA this is an example' 
    match = re.search(r'AAAA', string) 

    if match: 
     print 'found', match.group() 
    else:  
     print 'did not find' 

Это возвращает «найден" AAAA»

Сделайте то же самое для двух других строк, и это будут работать одинаково. Регулярные выражения могут делать намного больше, чем просто так, работать с ними и видеть, что еще они могут сделать.

0

Предполагая, что вы имеете в виду вся строка представляет собой повторяющийся рисунок, this answer имеет хорошее разрешение:

def principal_period(s): 
    i = (s+s).find(s, 1, -1) 
    return None if i == -1 else s[:i]