如何在python中没有ovelap的字符串中找到一些连续的字母?

时间:2018-06-06 06:44:03

标签: python python-3.x

我想看看我是否可以在一个不带重叠的字符串中找到2个连续的字母。 例如:如果字符串中有“HP”和“PH”,则答案为“是”,否则答案为“否”。

例如:

input -----> PHHP
output ----> YES

或:

input -----> HPPH
output ----> YES

和:

input -----> PHP
output ----> NO

或:

input -----> PHAP
output ----> NO

4 个答案:

答案 0 :(得分:0)

我想这应该适用于优化的范围。

s = 'phhp'

def validate():
  for i in range(len(s)):
    if len(s[i:i+2]) != 2:
      break
    if 'ph' == s[i:i+2]:
      if 'hp' in s[0:i] or 'hp' in s[i+2:i+4]:
        return True
  return False

print ('Found' if validate() else 'Not Found')

答案 1 :(得分:0)

尝试检查'hp'中是否有s,如果它是' ',请检查'ph'是否在s中,如果它已返回{ {1}}:

'YES'

输出:

def func(s):
    s = s.lower()
    if 'hp' in s:
        s = s.replace('hp',' ')
        if 'ph' in s:
            return 'YES'
        else:
            return 'NO'
    else:
        return 'NO'
print(func('HPHP'))

答案 2 :(得分:0)

您可以使用 re

<强>演示:

import re

def validate(string):
    return 'YES' if re.search(r'(PH.*HP)|(HP.*PH)', string) else 'NO'

inputs = ['PHHP', 'HPPH', 'PHP', 'PHAP']

for inp in inputs:
    print(inp, validate(inp))

<强>输出:

PHHP YES
HPPH YES
PHP NO
PHAP NO

答案 3 :(得分:0)

这适用于任何一对char,而不仅仅是PHHP

def validator(mystr):
    for i in range(len(mystr) - 2):
        Yo=''.join(reversed(mystr[i+2:i+4]))
        return mystr[i:i+2] == Yo
validator ('PHHP')
#True