Advertisement
BenjaminWade

palindromo

May 11th, 2023
528
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.21 KB | Software | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <ctype.h>
  5. #include <string.h>
  6.  
  7. #define MIN(a, b) (((a) < (b)) ? (a) : (b))
  8. #define MAX(a, b) (((a) > (b)) ? (a) : (b))
  9.  
  10.  
  11.  
  12. int is_it_palindrome(const char* str)
  13. {
  14.     int lenght;
  15.     int has_alnum = 0;
  16.     lenght = strlen(str);
  17.  
  18.     const char* start = str + 0;
  19.     const char* end = str + lenght - 1;
  20.  
  21.     while (start <= end)
  22.     {
  23.         if (!isalnum(*start))
  24.         {
  25.             start++;
  26.         }
  27.         else if (!isalnum(*end))
  28.         {
  29.             end--;
  30.         }
  31.         else if (toupper(*start) == toupper(*end))
  32.         {
  33.             has_alnum = 1;
  34.             start++;
  35.             end--;
  36.         }
  37.         else
  38.         {
  39.             return 0;
  40.         }
  41.     }
  42.  
  43.     return has_alnum;
  44. }
  45. int lps(char* str)
  46. {
  47.  
  48.     int n = strlen(str);
  49.     // int n = strlen(str);
  50.     int ehpalindromo = is_it_palindrome(str);
  51.     if (ehpalindromo == 1)
  52.     {
  53.         return n;
  54.     }
  55.  
  56.     int L[n][n];
  57.  
  58.     for (int i = 0; i < n; i++)
  59.     {
  60.         L[i][i] = 1;
  61.     }
  62.     for (int cl = 2; cl <= n; cl++)
  63.     {
  64.         for (int i = 0; i < n - cl + 1; i++)
  65.         {
  66.             int j = i + cl - 1;
  67.             if (str[i] == str[j] && cl == 2)
  68.             {
  69.                 // L[i][j] = L[i + 1][j - 1];
  70.                 L[i][j] = 2;
  71.             }
  72.             if (str[i] == str[j])
  73.             {
  74.                 L[i][j] = L[i + 1][j - 1] + 2;
  75.             }
  76.            
  77.             else
  78.                 L[i][j] = MAX(L[i][j - 1], L[i + 1][j]);
  79.         }
  80.     }
  81.     // printf("minimo de deletes");
  82.     // printf(" %d\n", n - L[0][n-1]);
  83.     return n - L[0][n - 1];
  84. }
  85.  
  86. int minumumNumberOfDeletions(char* str)
  87. {
  88.     int n = sizeof(str);
  89.  
  90.     int len = lps(str);
  91.     return len;
  92. }
  93.  
  94.  
  95. void main()
  96. {
  97.  
  98.     int entradas;
  99.     scanf("%d", &entradas);
  100.  
  101.     for (int i = 0; i < entradas; i++)
  102.     {
  103.         char* string;
  104.         string = malloc(255 * sizeof(char));
  105.         fgets(string, 255, stdin);
  106.         // scanf("%s", string);
  107.         // printf("%d\n", strlen(string));
  108.         int deletions = largestPalindrome(lista[i]);
  109.         printf("%d\n", deletions);
  110.         // free(string);
  111.     }  
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement