Description
给出一个长度为n的字符串,对于重复出现的字符,要把其转化为字符串中尚未出现的最小字母,问是否可以将这个字符串变成每个字母都不同的串
Input
一个只有小写字母字符串,串长不超过200000
Output
如果可以转化则输出转化后的结果,否则输出IMPOSSIBLE
Sample Input
abcba
Sample Output
abcde
Solution
简单题,长度超过26肯定不行,否则可以,对于重复字符枚举没出现的字符给其赋值即可
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
#define maxn 222222
char s[maxn];
int main()
{
while(~scanf("%s",s))
{
int n=strlen(s);
if(n>26)printf("IMPOSSIBLE\n");
else
{
int a[26],flag[26];
memset(a,0,sizeof(a));
memset(flag,0,sizeof(flag));
for(int i=0;i<n;i++)
{
int t=s[i]-'a';
if(!a[t])a[t]=1,flag[i]=1;
}
for(int i=0;i<n;i++)
{
int t=s[i]-'a';
if(a[t]&&!flag[i])
{
for(int j=0;j<26;j++)
if(!a[j])
{
s[i]=j+'a';
a[j]=1;
break;
}
}
}
printf("%s\n",s);
}
}
return 0;
}