POJ1002 TLE

POJ1002 TLE求助!
代码有点长,delHyp()是删除输入串中的‘-’,changeStr()是全部转为‘0’-‘9’之间的字符,转换后之接冒泡排序的,可是一直超时;后来换了qsort()之后还是TLE,实在不知道什么地方效率低,还望高手指点……
PS:总是很喜欢C++的动态分配,感觉这样空间不会浪费,不知道是不是因为这个耗费了太多时间哦?
#include <iostream>
#include <string>
using namespace std;

void changeStr(string & a)
{
  int i = 0;
  int len = a.length();
  for (i = 0; i < len; i++)
  {
  if (a[i] == 'A' || a[i] == 'B' || a[i] == 'C')
  a[i] = '2';
  else if (a[i] == 'D' || a[i] == 'E' || a[i] == 'F')
  a[i] = '3';
  else if (a[i] == 'G' || a[i] == 'H' || a[i] == 'I')
  a[i] = '4';
  else if (a[i] == 'J' || a[i] == 'K' || a[i] == 'L')
  a[i] = '5';
  else if (a[i] == 'M' || a[i] == 'N' || a[i] == 'O')
  a[i] = '6';
  else if (a[i] == 'P' || a[i] == 'S' || a[i] == 'R')
  a[i] = '7';
  else if (a[i] == 'T' || a[i] == 'U' || a[i] == 'V')
  a[i] = '8';
  else if (a[i] == 'W' || a[i] == 'X' || a[i] == 'Y')
  a[i] = '9';
  }
}
void delHyp(string & a)
{
  string::iterator it;
  for (it = a.begin(); it <= a.end(); it++)
  {
  if (*it == '-')
  a.erase(it);
  }
}
int main()
{
  int n;
  cin >> n;
  string *str = new string[n];
  string *reStr = new string[n];
  int *flagStr = new int[n];
  int i = 0;
  for (i = 0; i < n; i++)
  {
  cin >> str[i];
  delHyp(str[i]);
  changeStr(str[i]);
  flagStr[i] = 0;
  }
  int j = 0;
  int Gflag = 0;
  for (i = 0; i < n; i++)
  {
  if (flagStr[i] == 0)
  {
  for (j = i + 1; j < n; j++)
  {
  if (str[i] == str[j])
  {
  flagStr[i]++;
  flagStr[j] = -1;
  Gflag = 1;
  }
  }
  }
  }
  if (Gflag == 0)
  cout << "No duplicates." << endl;
  else
  {
  j = 0;
  for(i = 0; i < n; i++)
  {
  if (flagStr[i] > 0)
  {
  reStr[j] = str[i];
  flagStr[j] = flagStr[i];
  j++;
  }
  }
  int reStrlen = j;
  string temp;
  int flagTmp;
  for ( i = 0; i < reStrlen; i++)
  {
  for (j = i + 1; j < reStrlen; j++)
  if (reStr[i] > reStr[j])
  {
  temp = reStr[i];
  reStr[i] = reStr[j];
  reStr[j] = temp;
  flagTmp = flagStr[i];
  flagStr[i] = flagStr[j];
  flagStr[j] = flagTmp;
  }
  }
  for (i = 0; i < reStrlen; i++)
  {
  for (j = 0; j < 3; j++)
  {
  cout << reStr[i][j];
  }
  cout << '-';
  for (j = 3; j < 7; j++ )
  cout << reStr[i][j];