CF672B Different is Good

题目描述

一位智者曾对 Kerem 说过“不同是好的”,因此 Kerem 渴望生活中的一切都与众不同。 最近,Kerem 得到了一串由小写英文字母组成的字符串 $s$。由于 Kerem 喜欢一切都与众不同,他希望自己的字符串 $s$ 的所有子串都是不同的。子串是由字符串中若干连续字符组成的字符串。例如,字符串 "aba" 的子串有 ""(空子串)、"a"、"b"、"a"、"ab"、"ba"、"aba"。 如果字符串 $s$ 至少有两个相同的子串,那么 Kerem 就会将某些位置的字符改成其它小写英文字母。改变字符的工作非常繁琐,因此 Kerem 希望操作次数尽可能少。 你的任务是求出至少需要多少次修改,才能使给定字符串的所有子串都不同,或者判断是否无法实现。

输入格式

输入的第一行是一个整数 $n$($1 \leq n \leq 100000$),表示字符串 $s$ 的长度。 第二行是一个长度为 $n$、仅由小写英文字母组成的字符串 $s$。

输出格式

如果无法通过修改使 $s$ 的所有子串都不同,则输出 -1。否则,输出所需的最小修改次数。

说明/提示

在第一个样例中,一种可行的方案是将第一个字符改为 'b'。 在第二个样例中,可以把第一个字符改成 'a',第二个字符改成 'b',那么字符串变为 "abko"。 由 ChatGPT 5 翻译