http://www.pipioj.online/problem.php?id=1463
思路:把字符串丢到
s
e
t
set
set里面即可,但是直接丢太暴力了。空间复杂度和时间复杂度都很高,我们可以把长度为
n
n
n的仅包含
c
c
c的字符串抽象为一对数据:
(
c
,
n
)
(c,n)
(c,n),把这一对数据插入到
s
e
t
set
set中维护即可。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=1e5+5;
char s[maxn];
struct node
{
char c;
int cnt;
node(char c,int cnt):c(c),cnt(cnt){}
bool operator <(const node &a)const
{
if(c==a.c)
return cnt<a.cnt;
return c<a.c;
}
};
void pr(const node &a)
{
int cnt=a.cnt;
while(cnt)
putchar(a.c),--cnt;
putchar('\n');
}
int main()
{
while(~scanf("%s",s))
{
int n=strlen(s),ed;
set<node> st;
for(int i=0;i<n;)
{
ed=i+1;
while(ed<n&&s[ed]==s[i])
ed++;
st.insert(node(s[i],ed-i));
i=ed;
}
printf("%d\n",(int)st.size());
for(const node& a:st)
pr(a);
}
return 0;
}