我们把“等价”理解为字符多重集合相同(即字母出现次数一致、顺序无关)。 对每个字符串 si ,只要它包含某个字母 c 至少 x 次,就能从中挑出 x 个 c 作为子序列的一部分。于是:
若要存在同一个字符串 t 被每个 si 的某个子序列“等价”,那么对每个字母 c,在 t 中的出现次数 cntt[c] 不能超过所有字符串中该字母出现次数的最小值:
cntt[c]≤imincntsi[c]定义两个字符串是等价的,当且仅当其中一个串可以通过重新排列这些字符得到另一个串。例如,abccb和cbcba等价,a和a等价,abba和baab等价。而abc和aac不等价,a和b不等价。
现在输入n个仅由小写字母组成的字符串s1,s2,…,sn,你需要找到一个长度最长的字符串t,使得每个串都能找到一个子序列,这个子序列形成的字符串与t等价。