POJ 3974 最长回文字串(二)

2013-11-20 14:23:54 · 作者: · 浏览: 223

 

  for (; i < len; i++) {

  str[i * 2 + 2] = s[i];

  str[i * 2 + 3] = '#';

  }

  str[2 * len + 2] = 0;

  for (int i = 1; i < 2 * len + 2 ; i++) {

  rad[i] = 0;

  }

  int id = 0;

  for (i = 1; i < 2 * len + 2; i++) {

  if (max > i)

  rad[i] = min(rad[2 * id - i], rad[id] + id - i) ;

  else

  rad[i] = 1 ;

  while (str[i + rad[i]] == str[i - rad[i]])

  rad[i] ++ ;

  if (rad[i] + i > max) {

  max = rad[i] + i;

  id = i;

  }

  }

  int mx = 0;

  for (i = 1; i < 2 * len + 2 ; i++) {

  if (mx < rad[i] - 1)

  mx = rad[i] - 1;

  }

  return mx;

  }

  int main() {

  int ca = 0 ;

  while(scanf("%s",s) != EOF) {

  if(strcmp(s , "END") == 0)break ;

  printf("Case %d: " , ++ ca) ;

  printf("%d\n",manacher()) ;

  }

  return 0 ;

  }