额,也没什么好说的吧,就是先数出来每个字母有多少个,然后按顺序输出,输出一个,计数减一,直到所有的都为零,就结束。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 10010;
int g,p,l,t;
int main()
{
	char c;
	while(~scanf("%c",&c) && c != '\n')
	{
		if(c == 'G' || c == 'g')
			g++;
		else if(c == 'P' || c == 'p')
			p++;
		else if(c == 'L' || c == 'l')
			l++;
		else if(c == 'T' || c == 't')
			t++;
	}
	while(g || p || l || t)
	{
		if(g)
		{
			printf("G");
			g--;
		}
		if(p)
		{
			printf("P");
			p--;
		}
		if(l)
		{
			printf("L");
			l--;
		}
		if(t)
		{
			printf("T");
			t--;
		}
	}
	return 0;
}