【问题标题】:Check for repeated characters adjacent to each other in a string [duplicate]检查字符串中彼此相邻的重复字符[重复]
【发布时间】:2019-02-24 12:54:21
【问题描述】:

我希望用户输入这样的字符串,以 (a) 开头和结尾,并且中间有重复的字母,如下所示:

“阿巴巴巴巴巴巴” 重复可以是:(bb)、(bbb)、(bbbbb) 或更像这样: "abbbbbbabbba""abbbbabbbbabbbba"

我设法像这样检查字符串的开头和结尾:

input_sentence = input()
    if input_sentence[0] == 'a' and input_sentence[len(input_sentence) - 1] == 'a' :
        print('yes')

我尝试像这样检查以前的值:

pass= 'abbabbabba'
prev = ''
for character in pass:
    if character == prev:
       print("repeated character:", character)
    prev = character

我只是可以检查一次重复的字母。

也许这是不对的,但我想知道如何检查一个字母在字符串中是否以特定顺序重复

【问题讨论】:

  • 我不清楚你在问什么。我现在唯一可以建议的是input_sentence[len(input_sentence) - 1] 可以简单地为input_sentence[-1]。你也不能调用你的变量pass所以这应该是抛出错误。
  • 谢谢。我的意思是,我如何检查一个字母是否以这样的特定方式重复:(abbabbabba)如何检查 bb 在整个字符串中是否重复
  • 如果只是a和b,我会在a上拆分,然后看bs的字符串长度。
  • 你也需要检查a的重复吗?
  • 首先;不要使用那个 pass 关键字;其次;你的问题还不清楚

标签: python python-3.x


【解决方案1】:

您可以使用regular expression 来检查输入是否与所需的模式匹配。

>>> p = r'^(abb+)+a$'
>>> re.match(p, "abbabbabbabbabba")
<re.Match object; span=(0, 16), match='abbabbabbabbabba'>
>>> re.match(p, "abbbabbbabbba")
<re.Match object; span=(0, 13), match='abbbabbbabbba'>
>>> re.match(p, "abbbabbbaba")
>>> 

模式p 匹配一个字符串,该字符串完全由一个或多个“a”字符串组成,后跟至少两个“b”,最后有一个“a”。

如果字符串匹配模式,match函数将返回一个匹配对象,否则返回None

【讨论】:

  • 谢谢,但只是为了澄清一下,例如我这样写: import re input_sentence = input() p = r'^(abb+)+a$' re.match(p, input_sentence)跨度>
  • @alfredjacob - 看起来不错,但您需要检查 match 函数的返回值以查看字符串是否与模式匹配。
  • @alfredjacob 您的输入看起来与在计算机科学课程中使用自动机时使用的输入非常相似。如果您正在上 CS 课程,那么您的教授可能更喜欢您从第一原理而不是使用正则表达式来制定算法。但值得知道的是,自动机和正则表达式是密切相关的概念。如果您不参加 CS 课程,请对胡言乱语表示抱歉 :-)
【解决方案2】:

@f.wue

应该是这样的:

input_sentence = input-sequence.split("a")
if input_sentence.startswith('a') and input_sentence.endswith('a'):
    print('yes')

ex = 'abbabbabbabba'

def check_recursive(character, last_characters):
    sequence = character
    for i in reversed(range(0,len(last_characters))):
        if last_characters[i] == character:
            sequence += last_characters[i]
        else:
        return sequence

outputs = []
for i in reversed(range(1, len(ex))):
    output = check_recursive(ex[i], ex[:i])
    if output != ex[i]:
        outputs.append(output)
if len(set(outputs)) == 1:
    print("Only one type of sequence.")

【讨论】:

  • @f.wue 你是这个意思吗?
  • 我不会就您的问题编辑我的帖子。如果您的输入总是有一个 a,请参阅 w3schools.com/python/ref_string_split.asp 以获取有关如何使用拆分的一些教程。还请参观一下 stackoverflow 的工作原理:stackoverflow.com/tour 目标不是调试代码的每一行,而是回答您尝试了多项操作的特定问题。
猜你喜欢
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 2016-06-27
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多