如果模式具有相同的计数值,则接受字符串

2024-09-30 14:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图制作一个程序,在一个模式出现在序列中的次数具有相同的计数值的条件下,如果一个字符串被接受或不被接受,则打印该程序;例如,将接受“aaabbccc”,但不接受“aabccc”。我对如何实现它有一些想法,但我被卡住了。任何建议都会很有帮助,非常感谢

# B = {a^n b^n c^n | n ≥ 0}

string = 'aaabbbccc'

count_a = 0
count_b = 0
count_c = 0

for i in string:
    if i == 'a':
        count_a += 1
    elif i == 'b':
        count_b += 1
    elif i == 'c':
        count_c += 1
    else:
        pass
    
if count_a == count_b and count_b == count_c:
    print('String accepted')
else:
    print('Not accepted')

Tags: 字符串程序stringifcount模式序列条件
3条回答

您希望接受这种语言B = {a^n b^n c^n | n ≥ 0}。检查这一点的简明方法是:

def accept_b(s):
    n = len(s) - len(s.lstrip('a'))
    return len(s) == 3*n and s[n:2*n] == 'b'*n and s[2*n:] == 'c'*n

只需对字符串中的每个唯一字符进行计数,如果字符计数不相等,则返回“not accepted”,否则返回“string accepted”

 def character_counter(string):
    set_string = set(string)
    current_count = 0
    for char in set_string:
        if current_count == 0:
            current_count = string.count(char)
        else:
            count_char = string.count(char)
            if count_char!=current_count:
                return 'Not accepted'
    return 'String accepted'
from collections import Counter
test_str = "aabbccc"
counter = Counter(test_str)
print(len(set(counter.values())) == 1)

因此计数器计算每个字符重复的次数,然后我们检查 字典中有多少不同的值。如果它们都相同,则长度为1

相关问题 更多 >