問題
与えられた英小文字で構成されている文字列を2つに分割して、それぞれに共通して含まれる英小文字の種類が最大となる分割を探して、
共通する英小文字の数を出力する問題。
方針
文字列の左から順番に分割するパターンを試していって、共通する英小文字の数がその時点での最大値となったら更新。
工夫
- 漏れのないようにスライスで部分文字列に分割
- それぞれの部分文字列をset型に変換して、共通する要素を求めるために積集合をとる
N = int(input())
S = input()
# 共通する英小文字の種類の初期化
cnt = 0
for i in range(1, N):
# スライスで部分文字列をつくって、set型に変換し、積集合で共通する英小文字を取得
dup_cnt = set(S[:i]) & set(S[i:])
# 共通する英小文字の数が現時点での最大値より大きいなら最大値を更新
if cnt < len(dup_cnt):
cnt = len(dup_cnt)
print(cnt)