飞道的博客

2021年1月22日20:48:41LCS问题

302人阅读  评论(0)

  
  1. /*
  2. key to LCS problem
  3. bug1:当输入s1,s2长度不一致时,答案运行不出来
  4. 2020-1-22
  5. */
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<string.h>
  9. int main()
  10. {
  11. char s1[ 100]={ 0},s2[ 100]={ 0};
  12. int x,y,max= 0;
  13. printf( "please input s1:");
  14. gets(s1);
  15. printf( "please input s2:");
  16. gets(s2);
  17. printf( "waiting.....\n");
  18. x= strlen(s1)+ 1; //col 列
  19. y= strlen(s2)+ 1; //line行
  20. int **p=( int**) malloc(y* sizeof( int*));
  21. for( int i= 0;i<y;i++)
  22. p[i]=( int*) malloc(x* sizeof( int));
  23. for( int i= 0;i<x;i++)
  24. p[ 0][i]= 0;
  25. for( int i= 0;i<y;i++)
  26. p[i][ 0]= 0;
  27. for( int i= 1;i<x;i++) //x->s1
  28. {
  29. for( int j= 1;j<y;j++) //y->s2
  30. {
  31. if(s1[i -1]==s2[j -1])
  32. p[i][j]=p[i -1][j -1]+ 1;
  33. else
  34. p[i][j]=(p[i -1][j]>p[i][j -1])?p[i -1][j]:p[i][j -1];
  35. max=(max>p[i][j])?max:p[i][j];
  36. }
  37. }
  38. for( int i= 0;i<y;i++)
  39. free(p[i]);
  40. free(p);
  41. printf( "the max length is: %d\n",max);
  42. /*
  43. improved version 滚动数组优化
  44. */
  45. int** q=( int**) malloc( sizeof( int*)* 2);
  46. int Max= 0;
  47. for( int i= 0;i< 2;i++)
  48. q[i]=( int*) malloc( sizeof( int)*y);
  49. for( int i= 0;i< 2;i++)
  50. q[i][ 0]= 0;
  51. for( int i= 0;i<y;i++)
  52. q[ 0][i]= 0;
  53. for( int i= 1;i<x;i++)
  54. {
  55. for( int j= 1;j<y;j++)
  56. {
  57. if(s1[i -1]==s2[j -1])
  58. q[i% 2][j]=q[(i -1)% 2][j -1]+ 1;
  59. else
  60. q[i% 2][j]=(q[(i -1)% 2][j]>q[i% 2][j -1])?q[(i -1)% 2][j]:q[i% 2][j -1];
  61. Max=(Max>q[i% 2][j])?Max:q[i% 2][j];
  62. }
  63. }
  64. for( int i= 0;i< 2;i++)
  65. free(q[i]);
  66. free(q);
  67. printf( "the Max length is: %d\n",Max);
  68. return 0;
  69. }

 


转载:https://blog.csdn.net/Blackvisitor/article/details/113002077
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场