回文字符串

经典动归算法,优化了下空间

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int a[2][1002];
 5 char b[1002];
 6 char c[1002];
 7 
 8 int main()
 9 {
10     int n;
11     scanf("%d", &n);
12     while (n--)
13     {
14         memset(a, 0, sizeof(a));
15         memset(c, 0, sizeof(c));
16         scanf("%s", b);
17         int lb = strlen(b), i, j;
18         for (i = lb - 1; i >= 0; i--)
19             c[lb - 1 - i] = b[i];
20         for (i = 0; i < lb; i++)
21         {
22             for (j = 0; j < lb; j++)
23             {
24                 if (b[i] == c[j])
25                     a[(i + 1) % 2][j + 1] = a[i % 2][j] + 1;
26                 else
27                     a[(i + 1) % 2][j + 1] = a[(i + 1) % 2][j] > a[i % 2][j + 1] ? a[(i + 1) % 2][j] : a[i % 2][j + 1];
28             }
29         }
30         printf("%d\n", lb - a[lb % 2][lb]);
31     }
32 
33     return 0;
34 }

posted on 2012-08-10 10:57  Xor<>OR  阅读(146)  评论(0)    收藏  举报

导航