题目:统计一个串的回文子串的个数。
分析:dp,暴力。由于数据较小,直接暴力求解即可。
说明:(UVa终于进入前800了)。
#include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> using namespace std; char str[82]; char ans[3200][82]; int main() { while (~scanf("%s",str)) { int count = 0,len = strlen(str); for (int i = 1 ; i <= len ; ++ i) for (int s = 0 ; s < len ; ++ s) { int flag = 1; for (int t = s+i-1 ; t >= s ; -- t) if (str[s+s+i-1-t] != str[t]) { flag = 0; break; } if (flag) { for (int j = 0 ; j < i; ++ j) ans[count][j] = str[s+j]; ans[count][i] = 0; int same = 0; for (int j = 0 ; j < count ; ++ j) if (!strcmp(ans[j], ans[count])) { same = 1; break; } if (!same) count ++; } } printf("The string \'%s\' contains %d palindromes.\n",str,count); /* printf("The %d unique palindromes in \'boy\' are",count); for (int i = 0 ; i < count-1 ; ++ i) { printf(" \'%s\'",ans[i]); if (i < count-2) printf(","); else printf(" and "); } printf("\'%s\'.\n\n",ans[count-1]); */ } return 0; }
时间: 2024-12-29 04:17:14