当相邻字母不相同的时候做法显然,相同的时候将相同区间提取出来,然后按照不同做就行.
code:
#include <bits/stdc++.h>
#define ll long long
#define N 1000006
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
char str[N];
int p[N];
int main()
{
// setIO("input");
int n;
scanf("%d",&n);
int i,j,s=1,t=n;
scanf("%s",str+1);
for(i=1;i<=n;i=j)
{
j=i;
while(str[i]==str[j]&&j<=n) ++j;
// i 到 j-1 都与 i 相同.
if(j==n+1)
{
for(int k=i;k<j;++k)
p[s]=k,++s;
}
else
{
if(str[j-1]-'a'<str[j]-'a')
{
for(int k=j-1;k>=i;--k)
{
p[t]=k,--t;
}
}
else
{
for(int k=i;k<j;++k)
{
p[s]=k,++s;
}
}
}
}
for(i=1;i<=n;++i)
printf("%d ",p[i]);
return 0;
}