给出的串是一个不包含回文子串的串,再找到一个字典序比该串大的不包含回文子串的新串。
新串是可以通过变换旧串得到的,从后往前遍历旧串,对每个字符进行枚举,枚举的时候需要判断该字符与它的前两个字符是否都不相等,若都不相等则这个枚举出的字符成立。
具体细节看代码。
#include<cstdio>
char str[1005];
int n,p;
int main()
{
int i;
char ch;
scanf("%d%d",&n,&p);
scanf("%s",str);
char limit='a'+p-1;
for(i=n-1;i>=0;i--)
{
for(ch=str[i]+1;ch<=limit;ch++)
{
if(i>1)
{
if(ch==str[i-1] || ch==str[i-2])
{
continue;
}
}
else if(i>0)
{
if(ch==str[i-1])
{
continue;
}
}
str[i]=ch;
int j;
for(j=i+1;j<n;j++)
{
char tmp;
for(tmp='a';tmp<=limit;tmp++)
{
if(j>1)
{
if(tmp==str[j-1] || tmp==str[j-2])
{
continue;
}
}
else if(j>0)
{
if(tmp==str[j-1])
{
continue;
}
}
str[j]=tmp;
break;
}
}
printf("%s\n",str);
return 0;
}
}
printf("NO\n");
return 0;
}