fork(1) download
  1. #include<stdio.h>
  2. #define DEFMAX 1000
  3. #include<stdlib.h>
  4. #include<string.h>
  5.  
  6. void printpalin(char *p,int *arr,int i,int len)
  7. {
  8. int k = i - len + 1,j;
  9.  
  10. for(j=k;j<i;j+=2)
  11. printf("%c",p[j/2]);
  12. for(j=i;j>=k;j-=2)
  13. printf("%c",p[j/2]);
  14. printf("\n");
  15. }
  16.  
  17. int calclen(char *p,int *arr,int cen,int n)
  18. {
  19. int k=(cen%2+1)%2+1,count=0,l=(cen-k)/2,r=(cen+k)/2;
  20. while(l>=0 && r<n && p[l]==p[r])
  21. {
  22. count+=2;
  23. l--;
  24. r++;
  25. }
  26. return count+k-1;
  27. }
  28.  
  29. int main()
  30. {
  31. int i,j,k,x,max=0,count=0,cen=0,set;
  32. char *p = malloc(sizeof(char)*DEFMAX),*temp=p;
  33. printf("enter string\n");
  34. scanf("%s",p);
  35. while(*temp++)count++;
  36. int *arr = malloc(sizeof(int)*(2*count-1));
  37.  
  38. while(cen<(2*count-1))
  39. {
  40. x=0;
  41. set =1;
  42. //printf("cen is %d\n",cen);
  43. //get max palin length at center cen
  44. arr[cen] = calclen(p,arr,cen,count);
  45. //calculate next center
  46. for(k=1;k<=arr[cen]-2;k++)
  47. {
  48. if(arr[cen-k]<(arr[cen]-k))
  49. arr[cen+k] = arr[cen -k];
  50. else
  51. {
  52. cen+=k;
  53. set =0;
  54. break;
  55. }
  56. }
  57. if(set)
  58. cen++;
  59.  
  60. }
  61.  
  62. for(i=0;i<(2*count-1);i++)
  63. {
  64.  
  65. if(max<arr[i])
  66. max = arr[i];
  67. }
  68. printf("max length of the palindrome is %d\n",max);
  69. for(i=0;i<(2*count-1);i++)
  70. {
  71. if(max==arr[i])
  72. printpalin(p,arr,i,max);
  73. }
  74. return 0;
  75. }
  76.  
  77.  
stdin
abcbaba
compilation info
prog.c: In function ‘main’:
prog.c:31: warning: unused variable ‘j’
prog.c:34: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
stdout
enter string
max length of the palindrome is 5
abcba