题目描述
一位智者曾经告诉天佑“与众不同是好的”,所以天佑希望他生活中的一切都是不同的。天佑最近得到了一个由小写英文字母组成的字符串。因为天佑喜欢不同的事物,所以他希望字符串的所有子字符串都是不同的。子字符串是由字符串的若干连续字符组成的字符串。例如,字符串“aba”有子字符串“”(空子字符串)、“a”、“b”、“a”、“ab”、“ba”、“aba”。 如果字符串s至少有两个相同的子字符串,则天佑会将某些位置的字符更改为其他小写英文字母。更改字符是一项非常累人的工作,因此天佑希望执行尽可能少的更改。
你的任务是找到使给定字符串的所有子字符串都不同所需的最小更改数,或者确定这是不可能的。
输入
输入的第一行包含一个整数n( 1<=n<=100000 )表示字符串的长度
第二行包含长度为n的仅由小写组成的字符串
输出
如果不可能则输出-1;否则,输出最小更改数。
#include<iostream>
using namespace std;
int main()
{
int ans = 0;
char arr[100005];
int n;
int a;
cin >> n;
a=getchar();
gets(arr);
if (n <= 26 && n >= 1) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] != 'H' && arr[i] == arr[j]) {
ans++;
arr[j] = 'H';
}
}
}
cout << ans;
}
else cout << -1;
return 0;
}