字符串只有可能有 A、B、C 三个字母组成,如果任何紧邻的三个字母相同就非法。求长度为 n 的 合法字符串有多少个?其中,n 可以由用户输入

字符串只有可能有 A、B、C 三个字母组成,如果任何紧邻的三个字母相同就非法。求长度为 n 的
合法字符串有多少个?其中,n 可以由用户输入字符串只有可能有 A、B、C 三个字母组成,如果任何紧邻的三个字母相同就非法。求长度为 n 的
合法字符串有多少个?其中,n 可以由用户输入字符串只有可能有 A、B、C 三个字母组成,如果任何紧邻的三个字母相同就非法。求长度为 n 的
合法字符串有多少个?其中,n 可以由用户输入字符串只有可能有 A、B、C 三个字母组成,如果任何紧邻的三个字母相同就非法。求长度为 n 的
合法字符串有多少个?其中,n 可以由用户输入

先写个判断字符串中任意相邻的字符是否相等

def func(s:str):
for i in range(0,len(s)-1):
if s[i] == s[i+1]:
return False
return True

再写个遍历截取长度为n的字符串,并判断

def foo(s:str,n:int):
count_ = 0
for i in range(0,len(s)-n):
if func(s[i,i+n]:
count_ += 1
return count_

if name == "main":
s = input("请给定字符串")
n = int(input("请给定长度")
print(foo(s,n))

我有一个仅针对于你这个问题的解法。将非法的可能性列出,然后判断是否在里面。
对于扩展后的,建议用正则判断,非常简单。
手上没电脑,也只能口嗨一下了。

import itertools
x = ['A','B','C']

n = int(input("N: "))
count = 0
total = 0
for p in itertools.product(x, repeat=n):
    p =''.join(p)
    print(p, end=' ')
    total+=1
    if "AAA" not in p and "BBB" not in p and "CCC" not in p:
        count+=1

print("\nTotal: ", total)
print("Total valid: ", count)

输入3,输出:
N: 3
AAA AAB AAC ABA ABB ABC ACA ACB ACC BAA BAB BAC BBA BBB BBC BCA BCB BCC CAA CAB CAC CBA CBB CBC CCA CCB CCC
Total: 27
Total valid: 24