La subcadena más palíndromo (ignorando puntuacion y espacios)

código

1  // mínimo subcadena palindrómica, haciendo caso omiso de puntuacion y espacios 
2 #include <stdio.h>
 . 3 #include < cadena .h>
 . 4 # include <ctype.h>
 . 5  #define MAXN 5000 + 10
 . 6  
. 7  Char buf [MAXN] , S [MAXN];
 . 8  int P [MAXN];
 . 9  int main ()
 10  {
 11.      int n-, m = 0 ;
 12 es      fgets (buf, el sizeof (S), stdin);
 13 es      n- = strlen (BUF);
 14      para ( int I = 0 ; I <n-; I ++ )
15      {
 16          SI (el isalpha (buf [I]))
 17.          {
 18 es              P [m] = I;
 . 19              S [m ++] = toupper (buf [i]);
 20 es          }
 21 es      }
 22 es      la printf ( " % S \ n- " , S);
 23 es      
24      int max = 0 , X = 0 , Y = 0 ;
 25      
26 es  
27      // No optimización 
28      / * for (i = 0; I <m; i ++) // este enfoque requiere un triple ciclo, ver si otra manera siguiente
 29      {
 30  
31 se         for (int j = i; j <m; j ++)
 32          {
 33              int ok = 1, k;
34              for (k = 0; k <= (ji) / 2; k ++)
 35              {
 36                  if (! S [i + k] = s [jk])
 37                  {
 38                      ok = 0;
39                      break;
40                  }
 41              }
 42              Si (ok && j-i + 1> max)
 43              {
 44                  max = j-i + 1;
45                  x = p [i];
46                  y = p [j];
47              }
 48         }
 49      } * / 
50  
51 es      // método de optimización 
52 es      para (i = 0 ; i <m; i ++)    // esta i está en el centro, justo detector extensión 2 de manera cíclica a ambos lados, pero dos puntos de paridad el ciclo 
53 es      {
 54 es          int K;
 55          para (K = 0 ; IK> = 0 && I + K <m; K ++) // secuencia palindrómica tiene un número impar, s [i] para la secuencia palindrómica intermedio 
56          {
 57              IF (! S = S [K + I] [IK]) PAUSA ;         // if (! S [IK] = S [K + I])
 58                                               // { 
59              IF ( 2 * K + . 1> max)                     //         si (2 * (k-1) 1> max) 
60              {                                 //         { 
61                  max = 2 * k + 1 ;                   //             max = 2 * (k-1) 1; 
62                  x = p [ik];                    //             x = p [i- (k-1)]; 
63                  y = p [i + k];                    //             y = p [i + (k-1)]; 
64              }                                 //         }
 65                                               //         romper;
66                                               //} Si una frase tal escrito en un bloque, cuando el máximo aparece secuencia palindrómica al principio o al final, ya que el bucle se determina primero para el ik <0 o K + I> m, 
67          }                                     //      causando bucle de circulación para el extremo directa, no puede entrar si (2 * (k-1 ) 1> max) bloque de instrucciones, de modo que el máximo, x, y actualización falla, error 
68          
69          para (K = 0 ; IK> = 0 && I + K + 1. <m; K ++) / / secuencia palindrómica tiene un número par, s [i] para la secuencia palindrómica de centro izquierda 
70          {
 71 es              SI (S [IK] S = [I + K +! 1. ]) PAUSA ;         // IF (S [IK]! S = [I + K +. 1])
 72                                                 // { 
73 es              SI ( 2 * K + 2 > max)                       //        IF (2 * (K- 1) 2> max.) 
74              {                                 //         { 
75                  max = 2 * K + 2 ;                      //             max = 2 * (K- 1). 2; 
76                  X = P [IK];                     / /             X = P [I- (1-K.)]; 
77                  Y = P [I + K + 1. ];                     //             Y = P [I + (1-K.) hecho +1]; 
78              }                                   //         }
 79                                                 //         ROTURA ;
 80                                                 // } mal por la misma razón. 
81         }
 82      }
 83  
84  
85  
86      la printf ( " subcadena palindrómica (longitud más larga de caracteres solamente):% D \ n- " , max);
 87      para (I = X; I <= Y; I ++ ) la putchar (buf [I ]);
 88      la putchar ( ' \ n- ' );
 89      de retorno  0 ;
 90 }

 

 

Supongo que te gusta

Origin www.cnblogs.com/bboykaku/p/12629867.html
Recomendado
Clasificación