选出的字符串必须两两没有相同字母,自己内部有重复字母的字符串不能选。字母一共只有 26 种,把每个字符串压成一个位掩码。n≤20,从前往后考虑每个字符串,用字典记录「已经用掉的字符集合 → 最大长度」。
新字符串的掩码和某个旧状态没有交集时,才能接上去,新状态是两个掩码的或,长度相加。
给定 n 个只含小写字母的字符串。从中选出若干个,保持它们在原来数组里的先后顺序,顺次接成一个新字符串。接出来的字符串里每种字母最多出现一次。在所有合法接法里,求最长的长度。一个都不选时长度是 0。某个字符串自己内部就有重复字母时,它不能被选。
顺序只决定拼接的先后,不影响能不能选:两段字符串只要用到的字母没有交集,就都能选。
第一行一个整数 n。
接下来 n 行,每行一个字符串。
1≤n≤20
1≤∣si∣≤26,每个 si 只含小写字母。
输出一个整数,表示合法拼接的最大长度。
输入
3
un
iq
ue
输出
4
说明
un 和 iq 接成 uniq,长度 4。iq 和 ue 接成 ique,长度也是 4。un 和 ue 里都有 u,不能一起选。
输入
2
aa
bb
输出
0
说明
两段自己内部都有重复字母,都不能选,答案是 0。
输入
3
abcde
ab
cdef
输出
6
说明
只拿最长的 abcde 得到 5。ab 和 cdef 字母不交,接起来长度是 6。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册