回文字符串
经典动归算法,优化了下空间
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 }
浙公网安备 33010602011771号