from itertools import combinations def count_cpctf_like_subsequences(S): N = len(S) count = 0 for i, j, k, l, m in combinations(range(N), 5): s = [S[i], S[j], S[k], S[l], S[m]] # s1, s2, s3, s4, s5 if s[0] == s[2]: # s1 == s3 # i = j or {i,j} = {1,3} でのみ等しい ⇒ 他の組み合わせはすべて異なる if len(s) == len(set(s)) + 1: # 同じ文字が1組だけ(s1==s3)のとき、重複は1つだけ if s[1] != s[3] and s[1] != s[4] and s[3] != s[4]: # s2, s4, s5 も違うことを明示 count += 1 return count